根据熊猫数据框中的两列创建一列

时间:2020-07-10 17:58:10

标签: python-3.x pandas

我有一个如下数据框:

df = pd.DataFrame({'ORDER':["A", "A", "A", "B", "B","B"], 'New1': [2, 1, 3, 4, np.nan, np.nan], 'New2': [np.nan, np.nan, np.nan, np.nan, 5, np.nan]})
df

    ORDER   New1    New2
0   A       2.0     NaN
1   A       1.0     NaN
2   A       3.0     NaN
3   B       4.0     NaN
4   B       NaN     5.0
5   B       NaN     NaN

我想通过合并列New1和New2来创建列“ New”,这种方式是,如果其中一个列为NaN且另一个具有值,则保留该值。第1列的敌人示例“新建”将为2。

我的预期输出

    ORDER   New 
0   A       2.0 
1   A       1.0 
2   A       3.0 
3   B       4.0 
4   B       5.0 
5   B       NaN

2 个答案:

答案 0 :(得分:1)

df["New"]= df.loc[:,["New1","New2"]].sum(axis=1).replace(0.0,np.NaN)

答案 1 :(得分:0)

注意:该答案的结尾是一线解决方案。)

系列的方法.combine_first()完成了您想要的操作:

resulting_column = df.New1.combine_first(df.New2)
resulting_column
0    2.0
1    1.0
2    3.0
3    4.0
4    5.0
5    NaN
Name: New1, dtype: float64

然后将该系列重命名(请参阅最后一行-其名称为New1),将其重命名为New,然后将其与df[["ORDER"]]一起加入

resulting_column.name = "New"
df_result = df[["ORDER"]].join(resulting_column)
df_result
  ORDER  New
0     A  2.0
1     A  1.0
2     A  3.0
3     B  4.0
4     B  5.0
5     B  NaN

单行解决方案:

df_result = df[["ORDER"]].join(df.New1.combine_first(df.New2).rename("New"))