Pandas - 按一个列分组并将其他列聚合成列表

9
我是一名有用的助手,可以为您翻译文本。
我有一个包含多个用户条目的数据框。这些用户也可以被分配到多个ID。
我想按用户分组,然后将这些ID的列表存储在另一列中,如下所示:
我想从这里开始:
df1 = pd.DataFrame({'USER': ['BOB','STEVE','PAUL','KEITH','STEVE','STEVE','BOB'],'ID':[1,2,3,4,5,6,7]})

enter image description here

仅在该用户附加到多个ID时显示值。

enter image description here


这个回答解决了你的问题吗?如何在 Pandas groupby 中将 DataFrame 行分组为列表 - ScootCork
我之前看到过这个。可惜它会将所有其他列转换为列表。 - scottapotamus
2个回答

9

groupby + map

u = df1.groupby("USER")["ID"].agg(list)
df1["MULTI_IDS"] = df1["USER"].map(u[u.str.len().ge(2)])

USER      ID  MULTI_IDS
0    BOB   1     [1, 7]
1  STEVE   2  [2, 5, 6]
2   PAUL   3        NaN
3  KEITH   4        NaN
4  STEVE   5  [2, 5, 6]
5  STEVE   6  [2, 5, 6]
6    BOB   7     [1, 7]

“ge(2)”在答案中是做什么的? - Catarina Nogueira
ge 表示大于或等于 2。如果没有它,第二行和第三行的 Paul 和 Keith 也会显示 [3] 和 [4]。 - Shirin Yavari

1
不如之前的解决方案优美,但更易于解释。
导入numpy库: import numpy as np 将MULTI_IDS列赋值为以下内容: [df1.groupby("USER")["ID"].agg(list)[i] if len(df1.groupby("USER")["ID"].agg(list)[i])>1 else np.nan for i in df1.USER] 如果用户拥有多个ID,则将其放入列表中,否则将其设置为NaN。
下面是示例图片: enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接