当时我希望将人员与不同的组相匹配。虽然我目前有一个实现可以完成这项工作,但对于较大的 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]
