猿问

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

假设我有一个如下的数据框:


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 values

1   5

1   7

1   8

1   12

2   1

2   3

2   2

3   4

3   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)


偶然的你
浏览 149回答 2
2回答

四季花海

使用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]

元芳怎么了

您可以使用数据帧索引来删除所有大于 6 的索引并使用以下方法创建一组唯一索引:setA = set(df[df['values'] > 6]['ids'])这将在数据框中创建一组所有索引:setB = set(df['ids'])现在,more = list(setA)对于less,取集差:less = list(setB.difference(setA))而已!
随时随地看视频慕课网APP

相关分类

Python
我要回答