Вы можете сначала создать маску с помощью DataFrame.isna
и использовать DataFrame.loc
для замены значений:
df = pd.DataFrame({'Top Holdings':['aaa bb cc d'] * 11,
'Unnamed: 1':[np.nan] * 7 + ['s','d','f'] + [np.nan]})
print (df)
Top Holdings Unnamed: 1
0 aaa bb cc d NaN
1 aaa bb cc d NaN
2 aaa bb cc d NaN
3 aaa bb cc d NaN
4 aaa bb cc d NaN
5 aaa bb cc d NaN
6 aaa bb cc d NaN
7 aaa bb cc d s
8 aaa bb cc d d
9 aaa bb cc d f
10 aaa bb cc d NaN
mask = df['Unnamed: 1'].isna()
df.loc[mask, 'Unnamed: 1']= df.loc[mask, 'Top Holdings'].str.rsplit(n=1).str[0]
Другое решение с Series.fillna
:
df['Unnamed: 1'] = df['Unnamed: 1'].fillna(df['Top Holdings'].str.rsplit(n=1).str[0])
print (df)
Top Holdings Unnamed: 1
0 aaa bb cc d aaa bb cc
1 aaa bb cc d aaa bb cc
2 aaa bb cc d aaa bb cc
3 aaa bb cc d aaa bb cc
4 aaa bb cc d aaa bb cc
5 aaa bb cc d aaa bb cc
6 aaa bb cc d aaa bb cc
7 aaa bb cc d s
8 aaa bb cc d d
9 aaa bb cc d f
10 aaa bb cc d aaa bb cc