根据Pandas DataFrame中的值将行值复制到相邻列

问题描述:

我有一个带有两列A和B的pandas DataFrame,它们包含数值或NaN。其中的数值显示在一列,在另一列中的相应单元格将始终为NaN,例如:根据Pandas DataFrame中的值将行值复制到相邻列

A B 
0 123 NaN 
1 456 NaN 
2 NaN 789 

我想复制(或,可替换地,移动)任何非NaN值在列A到覆盖相应楠B列,如:

A B 
0 123 123 
1 456 456 
2 NaN 789 

基于this reply到类似的问题,我想出了:

mask = (df['A'] != np.nan)&(df['B'] == np.nan) 
df['B'][mask] = df['A'][mask] 

但是,这会导致没有变化。任何人都可以解释我要去哪里错了吗?

+0

我已经走了与jezrael的答案,但会圣对我为什么(在这种情况下不必要的复杂)尝试失败的任何线索都不具有价值? – TheRogueWolf

您可以使用combine_firstfillna

df.B = df.B.combine_first(df.A) 
print (df) 
     A  B 
0 123.0 123.0 
1 456.0 456.0 
2 NaN 789.0 

或者:

df.B = df.B.fillna(df.A) 
print (df) 
     A  B 
0 123.0 123.0 
1 456.0 456.0 
2 NaN 789.0 

ANF如果没有NaNB更换投给int后:

df.B = df.B.fillna(df.A).astype(int) 
print (df) 
     A B 
0 123.0 123 
1 456.0 456 
2 NaN 789