Python 复制非na行以使用熊猫填充非na列

Python 复制非na行以使用熊猫填充非na列,python,pandas,dataframe,series,na,Python,Pandas,Dataframe,Series,Na,我有一个如下所示的数据帧 df = pd.DataFrame({'person_id': [101,101,101,101], 'sourcename':['test1','test2','test3','test4'], 'Test':[np.nan,np.nan,'B5','B6']}) 我想做的是从Test列复制non-na行,并将其粘贴到sourcename列下的相应行中 df['source

我有一个如下所示的数据帧

df = pd.DataFrame({'person_id': [101,101,101,101],
                   'sourcename':['test1','test2','test3','test4'],
                            'Test':[np.nan,np.nan,'B5','B6']})
我想做的是从
Test
列复制
non-na
行,并将其粘贴到
sourcename
列下的相应行中

df['sourcename'].update(df['Test'])
当我尝试下面的方法时,它将
sourcename
列的其他行设置为
NA

df['sourcename'] = df.loc[df['Test'].notna()]['Test']
我希望我的输出如下所示

df = pd.DataFrame({'person_id': [101,101,101,101],
                   'sourcename':['test1','test2','test3','test4'],
                            'Test':[np.nan,np.nan,'B5','B6']})

一个想法包括:

具有检查非缺失值的解决方案:

如果已关闭,请分配给按掩码筛选的行:

df.loc[df['Test'].notna(), 'sourcename'] = df['Test']
或:

我们可以使用
Test
列中的
non-NaN
更新
sourcename
列中的值

df['sourcename'].update(df['Test'])


这两种解决方案都非常好,我非常感谢耶斯雷尔和舒巴姆。然而,我只能将一个解决方案标记为答案。因此,在不涉及代码的复杂细节的情况下,我将把Jezrael代码标记为所建议的多种解决方案的答案。再次感谢你们的帮助。除非Shubham和Jezrael更喜欢另一个更好的解决方案,否则我可以将其标记为解决方案。我不会深入到诸如速度、性能等复杂的代码细节中,因为我对此一无所知。再次感谢你的帮助
>>> df

   person_id sourcename Test
0        101      test1  NaN
1        101      test2  NaN
2        101         B5   B5
3        101         B6   B6