我有一个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)
首先使用
isin()
方法创建一个布尔掩码来检查您的条件:最后使用
reindex()
方法,重复那些行rep_times
和append()
方法将不满足条件的行追加回数据帧:相关问题 更多 >
编程相关推荐