我想根据其他一些列的标准在熊猫中创建一个新列。通常这可以使用np.select来完成,但是我想知道是否可以通过其他方式来完成。例如,基于列I1 = 1,I2 = 2和I3 = 3否则为“否”,使用'yes'创建一个标记columnn。
df = pd.DataFrame({
"NAME": [ "N1", "N2", "N3" ],
"I1": [ 1, 4, 4 ],
"I2": [ 2, 5, 2 ],
"I3": [ 3, 6, 6 ]
})
df
Out[76]:
NAME I1 I2 I3
0 N1 1 2 3
1 N2 4 5 6
2 N3 4 2 6
df['tag']=['yes' if ((x==1) & (y==2) & (z==3)) else 'no' for x,y,z in df['I1'],df['I2'],df['I2']]
File "<ipython-input-77-3bbe8c32a03c>", line 1
df['tag']=['yes' if ((x==1) & (y==2) & (z==3)) else 'no' for x,y,z in df['I1'],df['I2'],df['I2']]
^
SyntaxError: invalid syntax
答案 0 :(得分:1)
我将在dict
中进行条件处理,然后将eq
与all
一起使用
cond_d = {'I1':1,'I2':2,'I3':3}
df.iloc[:,1:].eq(cond_d ).all(1).map({True:'Yes',False:'No'})
Out[218]:
0 Yes
1 No
2 No
dtype: object
答案 1 :(得分:0)
import pandas as pd
import numpy as np
df = pd.DataFrame({
"NAME": [ "N1", "N2", "N3" ],
"I1": [ 1, 4, 4 ],
"I2": [ 2, 5, 2 ],
"I3": [ 3, 6, 6 ]
})
df['tag'] = np.where((df['I1'] == 1) | (df['I2'] == 2) | (df['I3'] == 3), 'yes', 'no')