首页 > 解决方案 > 如何以另一种格式获取列表?

问题描述

我有一个数据框,我只想要包含某个值的值。我已经实现了。我现在想要的是按用户分组的列表。我得到的是列表中数据框的每个元素。我如何获得这份清单[[User1.item1, ..., user1, itemn], ..., [Usern.item1, ..., usern, itemn]]

d = {'userid': [0, 0, 0, 1, 2, 2, 3, 3, 4, 4, 4],
     'itemid': [715, 845, 98, 12324, 85, 715, 2112, 85, 2112, 852, 102]}
df = pd.DataFrame(data=d)
print(df)

users = df.loc[df.itemid == 715, "userid"]
df_new = df.loc[df.userid.isin(users)]

list_new = df_new[['itemid']].values.tolist()
# What I get
[[715],[845],[98],[85],[715]]
# What I want
[[715,845,98],[85,715]]

标签: pythonpandaslistdataframe

解决方案


您可以使用groupby操作

list_new = df_new.groupby("userid")['itemid'].apply(list).tolist()
print(list_new)  # [[715, 845, 98], [85, 715]]

中间操作是

list_new = df_new.groupby("userid")['itemid'].apply(list)
print(list_new)  

userid
0    [715, 845, 98]
2         [85, 715]
Name: itemid, dtype: object

推荐阅读