如何根据列表中的项目复制熊猫中的行[重复]
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 的行。
这对我来说不起作用;我需要切换两个for
statements:[(row['COL'], d) for _, row in df.iterrows() for d in row['data']]
。
@AndyHayden,请更正您的答案。对我来说,也只有 RafG 答案有效。【参考方案2】:
您可以使用df.explode()
选项。请参阅documentation。我相信这正是您需要的功能。
【讨论】:
以上是关于如何根据列表中的项目复制熊猫中的行[重复]的主要内容,如果未能解决你的问题,请参考以下文章