为了账号安全,请及时绑定邮箱和手机立即绑定

循环遍历数据框列后如何附加列表?

循环遍历数据框列后如何附加列表?

偶然的你 2021-12-21 16:32:54
假设我有一个如下的数据框:df = pd.DataFrame({ 'ids' : ['1', '1', '1', '1', '2', '2', '2', '3', '3'],        'values' : ['5', '8', '7', '12', '2', '1', '3', '15', '4']        }, dtype='int32')ids values1   51   71   81   122   12   32   23   43   15我想要做的是遍历values列并检查哪些值大于 6,并且ids必须将列中的相应 id附加到空列表中。即使一个 id(比如 3)有多个值,并且在这些多个值(4 和 15)中,只有一个值大于 6,我希望将相应的 id 附加到列表中。示例: 假设我们对上述数据帧 df 运行一个循环,我希望输出如下:more = [1, 3]less = [2]以more =[]和less = []为预初始化空列表到目前为止我所拥有的: 我尝试实施相同的方法,但我肯定犯了一些错误。我有的代码:less = []more = []for value in df['values']:    for id in df['ids']:        if (value > 6):            more.append(id)        else:            less.append(id)
查看完整描述

2 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

使用groupby布尔索引来创建您的列表。这将比循环快得多:


g = df.groupby('ids')['values'].max()

mask = g.gt(6)

more = g[mask].index.tolist()

less = g[~mask].index.tolist()


print(more)

print(less)


[1, 3]

[2]


查看完整回答
反对 回复 2021-12-21
?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以使用数据帧索引来删除所有大于 6 的索引并使用以下方法创建一组唯一索引:

setA = set(df[df['values'] > 6]['ids'])

这将在数据框中创建一组所有索引:

setB = set(df['ids'])

现在,

more = list(setA)

对于less,取集差:

less = list(setB.difference(setA))

而已!


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信