【发布时间】:2021-12-06 14:54:18
【问题描述】:
我正在尝试根据df 中现有的其他列创建一个新列。
如果 A ~ E 列中至少有一个 1,我的新列 col 应该是 1。
如果 A ~ E 列中的所有值都是0,那么col 的值应该是0。
我附上了图片以便更好地理解。
不使用loop,使用python 执行此操作的最有效方法是什么?谢谢。
【问题讨论】:
我正在尝试根据df 中现有的其他列创建一个新列。
如果 A ~ E 列中至少有一个 1,我的新列 col 应该是 1。
如果 A ~ E 列中的所有值都是0,那么col 的值应该是0。
我附上了图片以便更好地理解。
不使用loop,使用python 执行此操作的最有效方法是什么?谢谢。
【问题讨论】:
如果需要测试所有列,请使用 DataFrame.max 或 DataFrame.any 并将 True/False 转换为整数以进行 1/0 映射:
df['col'] = df.max(axis=1)
df['col'] = df.any(axis=1).astype(int)
或者如果需要A:E之间的测试列添加DataFrame.loc:
df['col'] = df.loc[:, 'A':'E'].max(axis=1)
df['col'] = df.loc[:, 'A':'E'].any(axis=1).astype(int)
如果需要通过列表指定列使用子集:
cols = ['A','B','C','D','E']
df['col'] = df[cols].max(axis=1)
df['col'] = df[cols].any(axis=1).astype(int)
【讨论】:
df['col'] = df['A':'E'].max(axis=1) 可能是一个选项
loc 没有必要?
TypeError: cannot do slice indexing on RangeIndex with these indexers [A] of type str, loc 是必要的