我的数据看起来像这样
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
任何建议都会有所帮助!感谢
答案 0 :(得分: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
答案 1 :(得分: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 /标签信息而不是索引,请使用reset_index
。
您的示例数据集很小,因此不清楚这是否会概括您想要的方式。基本上它的作用是将id / label和code的每个组合的值设置为具有该组合的DataFrame的行数(例如,id = 1的值,label = 0,code = f1是1,因为那里是这一行的一行。)