列在大熊猫框架连接中丢失

时间:2015-04-06 09:43:26

标签: python pandas

我有两个数据集:

  1. 数据集 A 表示某个球员在特定年份的粉丝数
  2. 数据集 B 表示球队在特定游戏中获胜的次数
  3. 我现在想要将两个数据框合并,并按团队每年汇总数据。

    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查看数据。

    如何正确执行分组并加入这两个框架?

2 个答案:

答案 0 :(得分:1)

1) reset_index()只能使用一次。

aa = a.groupby(['year', 'team']).sum()
bb = b.groupby(['year', 'team']).sum()

aa.join(bb).reset_index()

2)或者,不要使用aabb

as_index=Falsepd.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)