如果是数据帧中两列或更多列之间的语句

时间:2018-05-02 13:47:52

标签: python pandas if-statement

我要做的是做一个简单的陈述,说明如果列不是''nan',那么在数据框中创建一个新列,并使其成为每一行的值。

ID1    ID2
Apple  nan
Orange nan
nan    Pear
nan    Grape

理想情况下,它会是这样的:

ID1    ID2    MasterID
Apple  nan    Apple
Orange nan    Orange
nan    Pear   Pear
nan    Grape  Grape

我尝试过使用以下内容:

df['MasterID'] = ''
df.loc[df['ID1'] != 'nan','MasterID'] = df['ID1']
df.loc[df['ID2'] != 'nan','MasterID'] = df['ID2']

但它正在做的只是优先考虑最后一个语句以撤消第二行创建的内容。当我使用numpy这样的语句时,同样的事情:

df['MasterID'] = np.where(df['ID1'] != 'nan',
                          df['ID1'],
                          df['ID2'])

我想在将来使用3+列时可以使用的东西。感谢任何指导。

2 个答案:

答案 0 :(得分:3)

首先替换NaN,然后每行替换sum

df['MasterID'] = df.fillna('').sum(axis=1)

如果需要指定列名:

df['MasterID'] = df[['ID1','ID2']].fillna('').sum(axis=1)

print (df)
      ID1    ID2 MasterID
0   Apple    NaN    Apple
1  Orange    NaN   Orange
2     NaN   Pear     Pear
3     NaN  Grape    Grape

答案 1 :(得分:2)

您可以使用bfill

df['New']=df.bfill(1).iloc[:,0]
df
Out[165]: 
      ID1    ID2     New
0   Apple    NaN   Apple
1  Orange    NaN  Orange
2     NaN   Pear    Pear
3     NaN  Grape   Grape

df['New']=df.ID1.fillna(df.ID2)