在pandas中使用不同类型的elif创建dataframe列

时间:2016-08-31 10:50:10

标签: python pandas indexing conditional-statements multiple-columns

这是question的扩展名。

我想做一些if / elif / else逻辑来创建数据帧列,伪代码示例:

if Col1 = 'A' and Col2 = 1 then Col3 = 'A1'
else if Col1 = 'A' and Col2 = 0 then Col3 = 'A0'
else Col3 = 'XX'

可以混合那里的类型吗?我收到此错误:

  

TypeError:无法将dtyped [int64]数组与[bool]类型的标量进行比较

1 个答案:

答案 0 :(得分:2)

我认为你可以使用:

df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'

使用双numpy.where

df["Col3"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1", 
             np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))

样品:

df = pd.DataFrame({'Col1':['A','B','A','B'],
                   'Col2':[1,1,0,0]})

print (df)
  Col1  Col2
0    A     1
1    B     1
2    A     0
3    B     0

df['Col3'] = 'XX'
df.loc[(df.Col1 == 'A') & (df.Col2 == 1), 'Col3'] = 'A1'
df.loc[(df.Col1 == 'A') & (df.Col2 == 0), 'Col3'] = 'A0'

df["Col4"] = np.where((df.Col1 == 'A') & (df.Col2 == 1) , "A1", 
             np.where((df.Col1 == 'A') & (df.Col2 == 0), 'A0', 'XX'))

print (df)
  Col1  Col2 Col3 Col4
0    A     1   A1   A1
1    B     1   XX   XX
2    A     0   A0   A0
3    B     0   XX   XX