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 始终只有一个与之关联的值。先感谢您。
你应该使用groupby和transform:
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会产生一定程度的开销。
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |