使用 pandas 复制非 na 行以填充非 na 列

Copy non-na rows to fill non-na columns using pandas

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

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

下的相应行中

当我尝试下面的操作时,它使 sourcename 列的其他行成为 NA

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

我希望我的输出如下所示

一个想法 Series.fillna:

df['sourcename'] = df['Test'].fillna(df['sourcename'])

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

你很接近,分配给掩码过滤的行:

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

或:

df['sourcename'] = np.where(df['Test'].notna(), df['Test'], df['sourcename'])

Series.update

我们可以 update sourcename 列中的值与 Test

中的 non NaN
df['sourcename'].update(df['Test'])

>>> df

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