根据NaN进行检查时如何选择特定的列Pandas数据框

时间:2019-02-04 16:17:00

标签: python pandas dataframe

我在Python中有一个熊猫数据框,看起来像

       AccountID_x    AccountId  AmountCD_x  AmountDOC_x  AmountDoc_x  
1              NaN  4001001copa       52.53        52.53          NaN   
2              NaN  4001001copa       52.53        52.53          NaN   
3      4001001copa          NaN       52.53        52.53          NaN   
4              NaN  4001001copa       52.53        52.53          NaN   

此数据帧是将两个数据帧合并在一起的合并命令的结果。我现在想做的是创建一个新列,该列将添加AccountID_x或AccountId而不是Nan,因此在上面的示例中,第1、2、4行将具有AccountId的值,而第3行将具有某些新列中AccountID_x中的值。

3 个答案:

答案 0 :(得分:2)

您可以使用Combine_first将两者结合起来

df['new_col'] = df['AccountId'].combine_first(df['AccountID_x'])

df['new_col']

1    4001001copa
2    4001001copa
3    4001001copa
4    4001001copa

答案 1 :(得分:1)

您还可以使用fillna传播apply

df2['newcolumn'] = df2[['AccountID_x','AccountId']].apply(lambda x: x.fillna(method='ffill')[-1], axis=1)

或等效地(在您的情况下):

df2['newcolumn'] = df2[['AccountID_x','AccountId']].apply(lambda x: x.fillna(method='bfill')[0], axis=1)

答案 2 :(得分:0)

尝试一下:

df['new_column'] = df.apply(lambda x: x['AccountId'] if pd.isnull(x['AccountID_x']) else x['AccountID_x'], axis=1)