循环遍历 Pandas 数据框以填充列表(Python)

Posted

技术标签:

【中文标题】循环遍历 Pandas 数据框以填充列表(Python)【英文标题】:Loop over Pandas dataframe to populate list (Python) 【发布时间】:2021-05-21 22:31:07 【问题描述】:

我有以下数据框:

import pandas as pd
action = ['include','exclude','ignore','include', 'exclude', 'exclude','ignore']
names = ['john','michael','joshua','peter','jackson','john', 'erick']
df = pd.DataFrame(list(zip(action,names)), columns = ['action','names'])

我也有一个这样的起始参与者列表:

participants = [['michael','jackson','jeremiah','martin','luis']]

我想迭代 df['action']。如果df['action'] == 'include',则将另一个列表添加到参与者列表中,其中包括所有以前的名称和 df['names'] 中的名称。因此,在第一次迭代之后,参与者列表应如下所示:

participants = [['michael','jackson','jeremiah','martin','luis'],['michael','jackson','jeremiah','martin','luis','john']]

我已经设法通过以下代码实现了这一点(我不知道这部分是否可以改进,尽管这不是我的问题):

for i, row in df.iterrows():
    if df.at[i,'action'] == 'include':
        person = [df.at[i,'names']]
        old_list = participants[-1]
        new_list = old_list + person
        participants.append(new_list)
    else:
        pass

主要问题(我的问题是),我如何在df['action'] == 'exclude' 时完成相同但删除名称?所以,在第二次迭代之后,我应该在参与者中有这个列表:

participants = [['michael','jackson','jeremiah','martin','luis'],['michael','jackson','jeremiah','martin','luis','john'],['jackson','jeremiah','martin','luis','john']]

【问题讨论】:

感谢您提供工作示例。 【参考方案1】:

您可以在代码中添加一个 elif。使用remove 方法,您可以按值删除项目。请注意,您的人是一个列表,而不是一个字符串。我只是用 [0] 的索引来调用它。

    elif df.at[i, 'action'] == 'exclude':
        person = [df.at[i, 'names']]
        participants.append(participants[-1].remove(person[0]))

【讨论】:

以上是关于循环遍历 Pandas 数据框以填充列表(Python)的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历列表以从 SQL 查询创建多个数据帧

在 python 中使用 pandas 组合列表中的数据框以形成单个数据框 [重复]

Pandas 数据框以列中的唯一值作为键,嵌套列表作为值

循环遍历数据框以更改列值-python [重复]

Pandas循环遍历数据帧并使用while循环列表

循环遍历数据框以消除数据中的巨大跳跃的最快方法