我有两个数据集:
我现在想要将两个数据框合并,并按团队每年汇总数据。
a = pd.DataFrame({
'year': [1995, 1995, 1995, 1995, 1996, 1996, 1996, 1996],
'team': ['Panthers', 'Panthers', 'Eagles', 'Eagles', 'Panthers', 'Panthers', 'Eagles', 'Eagles'],
'name': ['Joe', 'Betty', 'James', 'Sandra', 'Tyrone', 'Betty', 'James', 'Michael'],
'fans': [100, 200, 244, 277, 800, 900, 122, 300]
})
b = pd.DataFrame({
'year': [1995, 1995, 1995, 1995, 1996, 1996, 1996, 1996],
'team': ['Panthers', 'Panthers', 'Eagles', 'Eagles', 'Panthers', 'Panthers', 'Eagles', 'Eagles'],
'wins': [4, 2, 3, 5, 6, 7, 2, 4]
})
aa = a.groupby(['year', 'team']).sum()
bb = b.groupby(['year', 'team']).sum()
aa.join(bb)
这可行,但列似乎有些问题。最终操作aa.join(bb).columns
仅产生['fans', 'wins']
。我想这是一个不完整的groupby
操作遗留下来的。
为了更好地了解您,您可以使用nbviewer here查看数据。
如何正确执行分组并加入这两个框架?
答案 0 :(得分:1)
1) reset_index()
只能使用一次。
aa = a.groupby(['year', 'team']).sum()
bb = b.groupby(['year', 'team']).sum()
aa.join(bb).reset_index()
2)或者,不要使用aa
和bb
as_index=False
和pd.merge
创建级别
aa = a.groupby(['year', 'team'], as_index=False).sum()
bb = b.groupby(['year', 'team'], as_index=False).sum()
pd.merge(aa, bb)
这两种方法都会给你相同的输出
year team fans wins
0 1995 Eagles 521 8
1 1995 Panthers 300 6
2 1996 Eagles 422 6
3 1996 Panthers 1700 13
答案 1 :(得分:0)
此问题的解决方案是应用reset_index()
来“结束”分组操作。
因此,以下结果将得出正确的结果:
aa = a.groupby(['year', 'team']).sum().reset_index()
bb = b.groupby(['year', 'team']).sum().reset_index()
pd.merge(aa, bb)