如何在不使用多个OR的情况下将单个条件应用于数据框的列列表并向第4列添加值

时间:2019-02-13 13:02:48

标签: python pandas dataframe

我需要将一个条件应用于一个数据框的3列,并更改第4个值,而无需使用or语句。

我可以使用np.where,但如果列数很大,则将需要很多时间

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3,4],'b':[1,3,6,7],'c':[4,6,4,1], 'd':['p','f','p','u'],'e':['a','a','b','c']})

df['d'] = np.where(df.a > 4 | df.b > 4 | df.c > 4 , 'p',df['d']) 

df = pd.DataFrame({'a':[1,2,3,4,5],'b':[1,3,6,7],'c':[4,6,4,1], 'd':['p','f','p','f']})
df['d']=np.where(df.a > 4 | df.b > 4 | df.c > 4 , 'p','f') 

我需要以某种方式实现相同的条件> , <到列列表,而不使用或。

1 个答案:

答案 0 :(得分:1)

DataFrame.gtnp.where一起使用:

import numpy as np
import pandas as pd 

df = pd.DataFrame({'a':[1,2,3,4],'b':[1,3,6,7],'c':[4,6,4,1], 'd':['p','f','p','u'],'e':['a','a','b','c']})

# create a subset of a dataframe on which you want to check condition
new_df = df[['a','b','c']]
mask = new_df.gt(4).any(axis=1)  # check if any value is greater than 4

df['d'] = np.where(mask, 'p','f')

print(df)

输出:

   a  b  c  d  e                                                                                                                      
0  1  1  4  f  a                                                                                                                      
1  2  3  6  p  a                                                                                                                      
2  3  6  4  p  b                                                                                                                      
3  4  7  1  p  c