根据其他不同列上的条件在pandas数据框中创建新列

时间:2020-09-15 19:06:45

标签: pandas

我想根据其他一些列的标准在熊猫中创建一个新列。通常这可以使用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

2 个答案:

答案 0 :(得分:1)

我将在dict中进行条件处理,然后将eqall一起使用

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')