如何将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
答案 0 :(得分:1)
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