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

时间:2018-06-20 01:33:37

标签: python pandas dataframe

给出以下示例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

我希望能够用与该行中给定名称关联的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

但是,如果名称后面没有顺序排列,则此解决方案将无法获得预期的结果。我也不能按df['Name']进行排序,因为顺序很重要。是否有一种有效的方法,可以简单地通过关联的名称值填充给定的NaN值并将其分配给该值?

同样重要的是要注意,给定的名称将始终仅具有与之关联的单个值。预先谢谢你。

1 个答案:

答案 0 :(得分:4)

您应使用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

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

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