数据框:
df = pd.DataFrame({'First' : ['Mary', 'John', 'Jane', 'Mary', 'Jane', 'Mary', 'Mary'],
'Last' : ['Johnson', 'Smith', 'Doe', 'Johnson', 'Doe', 'Johnson', 'Johnson'],
'Group' : ['A', 'A', 'B', 'A', 'B', 'B', 'B'],
'Measure' : [10, 2, 11, 1, 20, 15, 15]})
First Last Group Measure
0 Mary Johnson A 10
1 John Smith A 2
2 Jane Doe B 11
3 Mary Johnson A 1
4 Jane Doe B 20
5 Mary Johnson B 15
6 Mary Johnson B 15
一个人可以出现在两个组中,这些数据中有期望和想要的重复项.
我想通过在列之间分布Group变量来重塑数据框.
我可以使用pivot_table()来做到这一点:
df.pivot_table(index=['First','Last'],
columns='Group',
values='Measure',
fill_value=0).reset_index()
Group First Last A B
0 Jane Doe 0.0 15.5
1 John Smith 2.0 0.0
2 Mary Johnson 5.5 15.0
默认情况下,将根据“度量”对每个分组使用均值.我想基于来自原始Group变量的新生成的列指定聚合函数.在这种情况下,我想在A列上使用Max,在B列上使用sum.所需的输出:
First Last A B
0 Mary Johnson 10 30
1 John Smith 2 0
2 Jane Doe 0 31
例如玛丽·约翰逊.对于她在GroupA中的值,最大值为10.对于她在B组中的值,总和为30.
尝试过:
df.pivot_table(index=['First','Last'],
columns='Group',
values='Measure',
fill_value=0,
aggfunc = {'A': max,
'B': sum}).reset_index()
导致出现错误消息KeyError:“ A”
如何透视数据框并在透视之后根据新列指定聚合函数?
解决方法:
您可以始终同时指定并且仅过滤
ndf = df.pivot_table(index=['First','Last'],
columns='Group',
values='Measure',
fill_value=0,
aggfunc=['sum', 'max'])
ndf.loc[:, ((ndf.columns.get_level_values(0)=='max') & (ndf.columns.get_level_values(1)=='A') ) | \
((ndf.columns.get_level_values(0)=='sum') & (ndf.columns.get_level_values(1)=='B') )]
sum max
Group B A
First Last
Jane Doe 31 0
John Smith 0 2
Mary Johnson 30 10
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。