行在pandas框架连接中丢失

2024-06-16 10:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个数据集:

  1. 数据集A代表一个球队的球员在特定年份拥有的球迷数量
  2. 数据集B表示一个团队在特定游戏中获胜的次数

我现在想结合这两个数据框架,并每年为每个团队汇总数据

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操作的遗留问题

为了更好地了解数据,可以使用nbviewerhere查看数据

如何正确地进行分组并将这两个帧连接起来?


Tags: 数据dataframe团队yearteamaapdgroupby
2条回答

1)reset_index()只能使用一次

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

aa.join(bb).reset_index()

2)或者,不要使用as_index=Falsepd.mergeaabb创建级别

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

这个问题的解决方案是应用reset_index()通过操作“结束”组

因此,以下将产生正确的结果:

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

pd.merge(aa, bb)

相关问题 更多 >