熊猫:根据索引列获取值

时间:2021-07-13 02:47:10

标签: python pandas

我有一个像这样的 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

其中 parent 表示 pandas 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

这是一个相当大的数据帧(10k+ 行),因此最好使用一些高效的方法。如何在不使用 .iterrows() 之类的东西的情况下执行此操作?

1 个答案:

答案 0 :(得分:5)

在你的情况下

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

或者尝试 fillnareplace

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