Python根据条件复制数据帧中的行

2024-04-24 09:22:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pandas数据框,需要在该数据框上根据特定列中给定的值列表复制一些行。如果一行在指定列中包含其中一个值,那么我需要复制该行

df = pd.DataFrame({"User": [1, 2], "col_01": ["C", "A"], "col_02": ["A", "C"], "col_03": ["B", "B"], "Block": ["01", "03"]})

    User col_01 col_02 col_03 Block
0     1      C      A      B    01
1     2      A      C      B    03

values = ["C", "D"]
columns = ["col_01", "col_02", "col_03"]
rep_times = 3

给定这两个值和列列表,在名为“col_01”、“col_02”或“col_03”的列中包含“C”或“D”的每一行都必须重复rep_times次,因此输出表必须如下所示:

    User col_01 col_02 col_03 Block
0     1      C      A      B    01
1     1      C      A      B    01
2     1      C      A      B    01
3     2      A      A      B    03

我尝试了下面这样的方法,但没有效果,我不知道如何创建这个最终的表。首选的方法是一个单线操作,完成这项工作

df2 = pd.DataFrame((pd.concat([row] * rep_times, axis=0, ignore_index=True)
if any(x in values for x in list(row[columns])) else row for index, row in df.iterrows()), columns=df.columns)

Tags: columns数据方法indataframedf列表col
1条回答
网友
1楼 · 发布于 2024-04-24 09:22:25
import pandas as pd

首先使用isin()方法创建一个布尔掩码来检查您的条件:

mask=df[columns].isin(values).any(1)

最后使用reindex()方法,重复那些行rep_timesappend()方法将不满足条件的行追加回数据帧:

df=df.reindex(df[mask].index.repeat(rep_times)).append(df[~mask])

相关问题 更多 >