[英]pandas pivot_table to 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
任何的意见都将会有帮助! 谢谢
我使用了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
这是一种方法:
>>> 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,因为在那里是包含这些值的一行)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.