【问题标题】:Loop over Pandas dataframe to populate list (Python)循环遍历 Pandas 数据框以填充列表(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']]

【问题讨论】:

  • 感谢您提供工作示例。

标签: pandas list for-loop


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-05-03
    • 1970-01-01
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多