Python - 根据条件复制 Pandas Dataframe 中的行
Python - Replicate rows in Pandas Dataframe based on condition
我有一个 Pandas DataFrame,我需要根据某些列中给定值列表的存在来复制一些行。如果某行在指定列中包含这些值之一,那么我需要复制该行。
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' 或 [=26= 的列中包含 'C' 或 'D' ] 必须重复 rep_times
次,因此输出 table 必须是这样的:
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
我尝试了类似下面的方法,但它不起作用,我不知道如何创建这个最终 table。首选方法是完成工作的单行操作。
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)
import pandas as pd
首先使用 isin()
方法创建一个布尔掩码来检查您的条件:
mask=df[columns].isin(values).any(1)
最后使用 reindex()
方法,重复那些行 rep_times
和 append()
方法将不满足条件的行追加回数据框:
df=df.reindex(df[mask].index.repeat(rep_times)).append(df[~mask])
我有一个 Pandas DataFrame,我需要根据某些列中给定值列表的存在来复制一些行。如果某行在指定列中包含这些值之一,那么我需要复制该行。
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' 或 [=26= 的列中包含 'C' 或 'D' ] 必须重复 rep_times
次,因此输出 table 必须是这样的:
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
我尝试了类似下面的方法,但它不起作用,我不知道如何创建这个最终 table。首选方法是完成工作的单行操作。
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)
import pandas as pd
首先使用 isin()
方法创建一个布尔掩码来检查您的条件:
mask=df[columns].isin(values).any(1)
最后使用 reindex()
方法,重复那些行 rep_times
和 append()
方法将不满足条件的行追加回数据框:
df=df.reindex(df[mask].index.repeat(rep_times)).append(df[~mask])