如何根据列表中的项目复制熊猫中的行[重复]

Posted

技术标签:

【中文标题】如何根据列表中的项目复制熊猫中的行[重复]【英文标题】:How to duplicate rows in pandas, based on items in a list [duplicate] 【发布时间】:2013-04-03 20:31:32 【问题描述】:

我有一个看起来像这样的 pandas 数据框:

COL     data
line1   [A,B,C]

其中数据列中的项目可以是列表,也可以只是逗号分隔的元素。有没有简单的获取方式:

COL     data
line1   A
line1   B
line1   C

我可以遍历列表并通过 python 手动复制行,但是有一些 magic pandas 技巧可以做到这一点吗?关键是如何自动复制行。

谢谢!

【问题讨论】:

【参考方案1】:

你可以写一个简单的清理函数让它成为一个列表(假设它不是一个逗号列表,你不能简单地使用ast.literal_eval):

def clean_string_to_list(s):
    return [c for c in s if c not in '[,]']  # you might need to catch errors

df['data'] = df['data'].apply(clean_string_to_list)

遍历行似乎是一个合理的选择:

In [11]: pd.DataFrame([(row['COL'], d)
                       for d in row['data']
                       for _, row in df.iterrows()],
                       columns=df.columns)
Out[11]:
     COL data
0  line1    A
1  line1    B
2  line1    C

恐怕我认为 pandas 不适合这种操纵。

【讨论】:

“row”和“row['COL']”从何而来? @AlexanderSupertramp 在列表理解内for _, row in df.iterrows()。 _ 是行的索引,行是作为系列的 df 的行。 这对我来说不起作用;我需要切换两个forstatements:[(row['COL'], d) for _, row in df.iterrows() for d in row['data']] @AndyHayden,请更正您的答案。对我来说,也只有 RafG 答案有效。【参考方案2】:

您可以使用df.explode() 选项。请参阅documentation。我相信这正是您需要的功能。

【讨论】:

以上是关于如何根据列表中的项目复制熊猫中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历熊猫中的行[重复]

如何在python中获取熊猫数据框的行列表? [复制]

如何根据熊猫中的行值创建新列

将包含列表的列拆分为熊猫中的不同行[重复]

熊猫根据索引标签选择特定列中的值[重复]

如何从熊猫中的前一行复制缺失的列值[重复]