我要做的是做一个简单的陈述,说明如果列不是''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+列时可以使用的东西。感谢任何指导。
答案 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)