我有一个pandas dataframe :
Name abc_1 abc_2 abc_3 abc_4 abc_5 abc_6 cde_1 cde_2 cde_3 cde_4 cde_5 cde_6
xyz True True False False False True True True False False False False
stu False False False False False False False False False False False True
vwx False True False False False False True True False False False False
对于给定的行,如果相应的cde列为 True ,则任何 abc_x 列都应更新为 True AND 至少 相应行的 abc 列之一是 True 。
结果: vwx 行的 abc_1 变为 True 但 stu 的 abc_6 行仍为 False ,如下所示:
Name abc_1 abc_2 abc_3 abc_4 abc_5 abc_6 cde_1 cde_2 cde_3 cde_4 cde_5 cde_6
xyz True True False False False False True True False False False False
stu False False False False False False False False False False False True
vwx True True False False False False True True False False False False
似乎,使用 iterrows ,然后通过迭代每列是选项。但是我有几个非常大的数据帧并且正在寻找一种pythonic方法。
答案 0 :(得分:3)
您可以考虑将列转换为多索引,然后对abc
和cde
列执行元素操作:
df.set_index('Name', inplace=True)
df.columns = df.columns.str.split("_", expand = True)
df['abc'] = (df['abc'] | df['cde']).apply(lambda col: col & df['abc'].any(axis=1))
如果您愿意,可以在以后将多索引连接到一个级别列:
df.columns = ["_".join(col) for col in df.columns]
答案 1 :(得分:2)