首页 > 解决方案 > Groupby Pandas 数据框基于来自另一个 df 的值

问题描述

我有一个数据框,我在其中保留所有相关属性,另一个具有我想对第一个 df 分组的属性。

我知道如果您将系列(一列)作为参数,您可以按数据框分组,如果您放入数据框,则会出现错误。

ValueError: Grouper for '<class 'pandas.core.frame.DataFrame'>' not 1-dimensional

我知道我可以将列连接到原始数据框,但我不希望这样做,除非没有其他解决方案。

df.groupby([sorted_team_names]).ngroup()

这是我的代码。sorted_team_names 是一个包含两列的 df,此外它具有与 df 相同的索引。

这是一个相当普遍的问题,我不确定您是否需要数据样本。

标签: pythonpandaspandas-groupby

解决方案


一种方法是分别按列分组:

df1 = pd.DataFrame({'a':[1,2,2,1], 'b':[1,2,2,1]})
print (df1)
   a  b
0  1  1
1  2  2
2  2  2
3  1  1

df2 = pd.DataFrame({'c':[1,2,3,7]})
print (df2)
   c
0  1
1  2
2  3
3  7

df3 = df2.groupby([df1['a'], df1['b']]).sum()
print (df3)
     c
a b   
1 1  8
2 2  5

...但索引必须在两个 DataFrame 之间匹配:

df1 = pd.DataFrame({'a':[1,2,2,1], 'b':[1,2,2,1]}, index=[2,5,6,8])
print (df1)
   a  b
2  1  1 <- matched only 2 index
5  2  2
6  2  2
8  1  1

df2 = pd.DataFrame({'c':[1,2,3,7]})
print (df2)
   c
0  1
1  2
2  3
3  7

df3 = df2.groupby([df1['a'], df1['b']]).sum()
print (df3)
         c
a   b     
1.0 1.0  3

推荐阅读