我有一个像这样的 pd 数据框:
df = pd.DataFrame({'val':[0.1,0.2,0.3,None,None],'parent':[None,None,None,0,2]})
parent val
0 NaN 0.1
1 NaN 0.2
2 NaN 0.3
3 0.0 NaN
4 2.0 NaN
Run Code Online (Sandbox Code Playgroud)
其中parent表示熊猫 df 中的索引。我想创建一个具有值或父值的新列。
看起来像这样:
parent val val_full
0 NaN 0.1 0.1
1 NaN 0.2 0.2
2 NaN 0.3 0.3
3 0.0 NaN 0.1
4 2.0 NaN 0.3
Run Code Online (Sandbox Code Playgroud)
这是一个相当大的数据帧(10k+ 行),因此最好使用一些有效的方法。我怎么能不使用类似的东西来做到这一点.iterrows()?
在你的情况下
df['new'] = df.val
df.loc[df.new.isna(),'new'] = df.loc[df.parent.dropna().values,'val'].values
df
Out[289]:
val parent new
0 0.1 NaN 0.1
1 0.2 NaN 0.2
2 0.3 NaN 0.3
3 NaN 0.0 0.1
4 NaN 2.0 0.3
Run Code Online (Sandbox Code Playgroud)
或尝试fillna用replace
df['new'] = df.val.fillna(df.parent.replace(df.val))
Out[290]:
0 0.1
1 0.2
2 0.3
3 0.1
4 0.3
Name: val, dtype: float64
Run Code Online (Sandbox Code Playgroud)