多索引数据框

时间:2017-05-09 15:13:32

标签: pandas pivot-table

如何将pandas.pivot_table应用于数据帧:

df = pd.DataFrame(
[
    {'o1_pkid': 645, 'o2_pkid': 897, 'colname': 'col1', 'colvalue': 'sfjdka'},
    {'o1_pkid': 645, 'o2_pkid': 897, 'colname': 'col2', 'colvalue': 25},
    {'o1_pkid': 645, 'o2_pkid': 159, 'colname': 'col1', 'colvalue': 'laksjd'},
    {'o1_pkid': 645, 'o2_pkid': 159, 'colname': 'col2', 'colvalue': 26}
]

获取多索引结果(由o1_pkid和o2_pkid索引),其中列来自 colname ,值来自 colvalue ?我希望得到一个类似的结果:

colname                 col1          col2
o1_pkid      o2_pkid 
645          897      'sfjdka'      25
             159      'laksjd'      26

1 个答案:

答案 0 :(得分:1)

使用set_index + unstack

df = df.set_index(['o1_pkid', 'o2_pkid', 'colname'])['colvalue'].unstack()

print (df)
colname            col1 col2
o1_pkid o2_pkid             
645     159      laksjd   26
        897      sfjdka   25

但如果得到错误:

  

ValueError:索引包含重复的条目,无法重塑

需要:

pivot_table包含一些汇总函数,例如sum

df = pd.DataFrame(
[
    {'o1_pkid': 645, 'o2_pkid': 897, 'colname': 'col1', 'colvalue': 'sfjdka'},
    {'o1_pkid': 645, 'o2_pkid': 897, 'colname': 'col2', 'colvalue': 25},
    {'o1_pkid': 645, 'o2_pkid': 159, 'colname': 'col1', 'colvalue': 'laksjd'},
    {'o1_pkid': 645, 'o2_pkid': 159, 'colname': 'col2', 'colvalue': 10},
    {'o1_pkid': 645, 'o2_pkid': 159, 'colname': 'col2', 'colvalue': 26}
])


df = df.pivot_table(index=['o1_pkid', 'o2_pkid'], 
                        columns='colname', 
                        values='colvalue', 
                        aggfunc='sum')
print (df)
colname            col1 col2
o1_pkid o2_pkid             
645     159      laksjd   36
        897      sfjdka   25

groupby + aggregate function + unstack

df = df.groupby(['o1_pkid', 'o2_pkid', 'colname'])['colvalue'].sum().unstack()

print (df)
colname            col1 col2
o1_pkid o2_pkid             
645     159      laksjd   36
        897      sfjdka   25
相关问题