我的df:
No A B C D
1 1 1 0 1
2 1 1 1 0
3 1 0 1 1
4 1 1 1 1
我想执行A或B或C或D并将结果写入列中。
No A B C D Result
1 1 1 0 1 1
2 1 1 1 0 1
3 1 0 1 1 1
4 1 1 1 1 1
...
所以想法是,即使A,B,C或D中存在一个“ 1”,结果也为“ 1”。
答案 0 :(得分:4)
一个想法是使用DataFrame.any
每行至少测试一个1
或每行使用max
:
#if No is column
df['Result'] = df.iloc[:, 1:].any(axis=1).astype(int)
#if No is index
#df['Result'] = df.any(axis=1).astype(int)
如果还有其他列:
df['Result'] = df[['A','B','C','D']].any(axis=1).astype(int)
或者:
df['Result'] = df[['A','B','C','D']].max(axis=1)
print (df)
No A B C D Result
0 1 1 1 0 1 1
1 2 1 1 1 0 1
2 3 1 0 1 1 1
3 4 1 1 1 1 1
答案 1 :(得分:1)
尝试使用:
df['Result'] = df.drop('No', axis=1).max(1)
print(df)
输出:
No A B C D Result
0 1 1 1 0 1 1
1 2 1 1 1 0 1
2 3 1 0 1 1 1
3 4 1 1 1 1 1
答案 2 :(得分:1)
要添加到有趣的方式列表中:
df_a['Result'] = df_a.eval('A + B + C').astype(bool)
优点是eval不会在内存中创建中间表。 如果您需要显式的 int 而不是 bool ,则可以进行强制转换,
df_a['Result'] = df_a.eval('A + B + C').astype(bool).astype(int)
答案 3 :(得分:1)
奇怪的是,没有人提到使用简单的|
运算符。
回答您的问题
df['Result'] = df['A'] | df['B'] | df['C'] | df['D']
类似地,如果您要执行其他操作,例如AND
df['Result'] = df['A'] & df['B'] & df['C'] & df['D']