使用其他已知列值的 Pandas Dataframe fillna()

rah*_*f23 3 python dataframe pandas

鉴于以下示例df

   Other1  Other2     Name Value
0       0       1  Johnson     C
1       0       0  Johnson   NaN
2       1       1    Smith     R
3       1       1    Smith   NaN
4       0       1  Jackson     X
5       1       1  Jackson   NaN
6       1       1  Jackson   NaN
Run Code Online (Sandbox Code Playgroud)

我希望能够NaN使用df['Value']与该行中给定名称关联的值填充值。我想要的结果如下,我知道可以这样实现:

df['Value'] = df['Value'].fillna(method='ffill')

   Other1  Other2     Name Value
0       0       1  Johnson     C
1       0       0  Johnson     C
2       1       1    Smith     R
3       1       1    Smith     R
4       0       1  Jackson     X
5       1       1  Jackson     X
6       1       1  Jackson     X
Run Code Online (Sandbox Code Playgroud)

但是,如果名称没有按顺序排列,则此解决方案将无法达到预期的效果。我也不能 sort by df['Name'],因为顺序很重要。是否有一种有效的方法来简单地填充给定的NaN通过关联的名称值值并将其分配给它?

同样重要的是要注意,给定的 Name 始终只有一个与之关联的值。先感谢您。

cs9*_*s95 5

你应该使用groupbytransform

df['Value'] = df.groupby('Name')['Value'].transform('first')
df

   Other1  Other2     Name Value
0       0       1  Johnson     C
1       0       0  Johnson     C
2       1       1    Smith     R
3       1       1    Smith     R
4       0       1  Jackson     X
5       1       1  Jackson     X
6       1       1  Jackson     X
Run Code Online (Sandbox Code Playgroud)

彼得的回答不正确,因为第一个有效值可能并不总是组中的第一个,在这种情况ffill下,前一组的值会污染下一组。

ALollz 的回答很好,但dropna会产生一定程度的开销。