假设我有一个如下的数据框: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]
元芳怎么了
TA贡献1798条经验 获得超7个赞
您可以使用数据帧索引来删除所有大于 6 的索引并使用以下方法创建一组唯一索引:
setA = set(df[df['values'] > 6]['ids'])
这将在数据框中创建一组所有索引:
setB = set(df['ids'])
现在,
more = list(setA)
对于less
,取集差:
less = list(setB.difference(setA))
而已!
添加回答
举报
0/150
提交
取消