用以前的非缺失值填充缺失的pandas数据,按键分组

2024-05-19 05:07:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理这样的熊猫数据帧:

   id    x
0   1   10
1   1   20
2   2  100
3   2  200
4   1  NaN
5   2  NaN
6   1  300
7   1  NaN

我想用具有相同“id”值的行中的前一个非NAN“x”替换每个NAN“x”:

   id    x
0   1   10
1   1   20
2   2  100
3   2  200
4   1   20
5   2  200
6   1  300
7   1  300

有没有什么巧妙的方法可以做到这一点而不需要手动在行上循环?


Tags: 数据方法id手动nan行上
2条回答

可以对每个组执行groupby/forward-fill操作:

import numpy as np
import pandas as pd

df = pd.DataFrame({'id': [1,1,2,2,1,2,1,1], 'x':[10,20,100,200,np.nan,np.nan,300,np.nan]})
df['x'] = df.groupby(['id'])['x'].ffill()
print(df)

收益率

   id      x
0   1   10.0
1   1   20.0
2   2  100.0
3   2  200.0
4   1   20.0
5   2  200.0
6   1  300.0
7   1  300.0
df
   id   val
0   1   23.0
1   1   NaN
2   1   NaN
3   2   NaN
4   2   34.0
5   2   NaN
6   3   2.0
7   3   NaN
8   3   NaN

df.sort_values(['id','val']).groupby('id').ffill()

    id  val
0   1   23.0
1   1   23.0
2   1   23.0
4   2   34.0
3   2   34.0
5   2   34.0
6   3   2.0
7   3   2.0
8   3   2.0

使用sort_values、groupby和ffill,这样,如果第一个值或第一组值有Nan值,它们也会被填充。

相关问题 更多 >

    热门问题