Skip to main content
 首页 » 编程设计

python之Pandas中Groupby进行跨组匹配的可能性

2025年05月04日19oomusou

当时我希望将人员与不同的组相匹配。虽然我目前有一个实现可以完成这项工作,但对于较大的 DataFrame,它会变得非常慢。我正在寻找实现 groupby 函数来查找每个人的组成员身份,但找不到解决方案。希望有人能指出我正确的方向。

DataFrame 的外观示例:

d = {"person": [1,2,3,4,5,6,1,5,2,1,7], 
     "group":  [1,1,1,2,2,2,3,3,3,4,4]} 
 
df = pd.DataFrame(d) 
 
print(d) 
 
    person  group 
0   1       1 
1   2       1 
2   3       1 
3   4       2 
4   5       2 
5   6       2 
6   1       3 
7   5       3 
8   2       3 
9   1       4 
10  7       4 

(工作)代码目前如下所示:

for g in df.group.unique(): 
 
    df_g = df.loc[df.group == g] 
 
    for p in df_g.person.unique(): 
 
        print(df.loc[df.person == p].group.unique()) # <-- the thing I care about. 
 
 
[1 3 4] 
[1 3] 
[1] 
[2] 
[2 3] 
[2] 
[1 3 4] 
[2 3] 
[1 3] 
[1 3 4] 
[4] 

如前所述,上面的代码非常慢(它需要遍历许多组,甚至更多的人)。是否可以通过 groupby 执行相同的操作?

请您参考如下方法:

使用GroupBy.transform与 SeriesGroupBy.unique对于由唯一值填充的新列:

df['new'] = df.groupby('person')['group'].transform('unique') 
print (df) 
    person  group        new 
0        1      1  [1, 3, 4] 
1        2      1     [1, 3] 
2        3      1        [1] 
3        4      2        [2] 
4        5      2     [2, 3] 
5        6      2        [2] 
6        1      3  [1, 3, 4] 
7        5      3     [2, 3] 
8        2      3     [1, 3] 
9        1      4  [1, 3, 4] 
10       7      4        [4]