我需要将一个条件应用于一个数据框的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')
我需要以某种方式实现相同的条件> , <
到列列表,而不使用或。
答案 0 :(得分:1)
将DataFrame.gt与np.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