将pandas pivot_table转换为DataFrame
我有一些数据,看起来像这样:
from pandas import DataFrame
data = [{'id': 1, 'label': 0, 'code': 'f1'}, {'id': 1, 'label': 0, 'code': 'f2'},
{'id': 2, 'label': 1, 'code': 'f3'},
{'id': 2, 'label': 1, 'code': 'f4'}]
df = DataFrame(data)
>>>
code id label
0 f1 1 0
1 f2 1 0
2 f3 2 1
3 f4 2 1
我想把这些数据重新整理成这样(要有合适的标题,并且没有错误的 id-label
关联)。
id label f1 f2 f3 f4
1 0 1 1 0 0
2 1 0 0 1 1
我试着用 pivot_table
,但是整理出来的数据看起来是这样的:
df['val'] = 1
pt_df = df.pivot_table('val', columns='code', index=['id', 'label'], fill_value=0, dropna=False)
>>>
f1 f2 f3 f4
1 0 1 1 0 0
1 0 0 0 0
2 0 0 0 0 0
1 0 0 1 1
如果有任何建议,我会很感激!谢谢!
2 个回答
0
我使用了 unstack,这个操作基本上就是把数据进行透视...
df['vals'] = 1
df = df.set_index(['id' ,'label' ,'code']).unstack('code').fillna(0)
#df = df.reset_index() #to bring out id and label
0
这里有一种方法:
>>> df.pivot_table(columns='code', index=['id', 'label'], aggfunc=len, fill_value=0)
code f1 f2 f3 f4
id label
1 0 1 1 0 0
2 1 0 0 1 1
[2 rows x 4 columns]
如果你想要把id/label的信息放在列里,而不是索引中,可以使用 reset_index
。
你的示例数据集很小,所以不太清楚这种方法是否适合你想要的情况。基本上,这个方法的作用是为每个id/label和code的组合设置一个值,这个值是数据表中有多少行包含这个组合(比如,id=1,label=0,code=f1的值是1,因为只有一行有这些值)。