我有一个如下数据框:
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
答案 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"))