我有一个数据框,其中我只需要值包含某个值的。我已经实现了。我现在想要的是按用户分组的列表。我得到的是列表中数据框的每个元素。如何获取此列表[[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]]
1.我们需要根据用户id对数据进行分组。分组在许多应用中非常重要,例如在机器学习预处理领域:例如:假设我们的数据是从位于一个州不同部分的不同站点的传感器收集的。假设我们正在测量压力和温度。假设有三个站,即1号站、2号站和3号站。在许多实际场景中,数据中可能缺少值。如果我们使用整个数据来填充缺失的值,我们可能不会得到好的结果。但如果我们只使用该站的数据来填充缺失的值,我们可以得到很好的结果(因为不同的站的条件不同,但在特定的站是相似的)。
ans = df.groupby('userid')['itemid'].apply(list)
userid
0 [715, 845, 98]
1 [12324]
2 [85, 715]
3 [2112, 85]
4 [2112, 852, 102]
Name: itemid, dtype: object
每行给出每个用户的所有itemid
如果你想在一行中完成所有的代码,你可以使用列表理解:
[x for x in [*df.groupby('userid')['itemid'].apply(list)] if 715 in x]
[[715, 845, 98], [85, 715]]
守则:
[*df.groupby('userid')['itemid']。
相当于
df_new.groupby(userid)['itemid']。
剩下的部分只是循环遍历从主列表中生成的内容^^^,看看
715
是否在任何子列表中,其中x
是上面代码中的子列表。
您可以使用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
问题内容: 这个问题已经在这里有了答案 : 迭代访问列表的最“ pythonic”方法是什么? (37个答案) 5年前关闭。 假设我有一个任意长度L的列表: 将列表分成几组的最佳方法是什么?这是我能够想到的最佳结构,由于某种原因,它似乎并不是完成任务的最佳方法: 有内置的功能可以做到这一点吗? 编辑: 早期的答案是将我的for循环重新制作为listcomp,这不是这个主意;您基本上是用另一种形式给
假设我有员工数据列表。 使用上面的empList,如何获得两个不同的列表,如年龄
我想将table 1的内容复制到table 2中,但它不是直接复制,因为table 2包含的列比表1多。结构类似于这样: 表 1 { 列 2 列 4 列 6 } 表2{column1 column2 column3 column4 column5 column6} 我想做的是将table1到table2中的每一行相加,并为缺少的列设置默认值。任何帮助都将不胜感激。
我有个问题。我试图将包含日期的字符串解析为另一种日期格式。代码: 错误消息: 请帮助。:)
问题内容: 假设我的表包含以下内容: 每次通过while循环。我想获取价格值的总和,但ID中的每个不同值仅获取一次 因此,以上述示例为例,我将得到类似以下内容的信息: 补充一下,我可能偶然发现了类似的帖子。问题是其他职位使用Oracle,另一方面我正在使用MySQL。 问题答案: 你需要和
问题内容: 我在我的网站中使用带有php的sql server 2008 r2。我有2张桌子。 1是给员工的。 2是上班 我想进行查询,以便给我提供类型为<3的员工姓名的工作描述。 就是说我想得到这样的结果。 同样地 那么我如何使用sql查询实现此结果呢? 我无法更改表架构。 我试图与case语句一起使用,但无法正常工作。 请帮我使这个工作.. 问题答案: 它的内容并不能完全回答问题,但是会建议您