pandas pivot_table到DataFrame

时间:2014-07-23 17:58:32

标签: python 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 :(得分: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,因为那里是这一行的一行。)