【问题标题】:Pandas fill NaN using prior value corresponding to some other pandas column熊猫使用与其他熊猫列对应的先验值填充 NaN
【发布时间】:2016-12-13 01:20:03
【问题描述】:

我有一个非常大的数据框,如下所示:

    fraction     id                
0   0.729797       0 
1   0.141084       1 
2   0.226900       2 
3   0.960937       3 
4   0.452835       4 
5   NaN            1 
6   0.352142       2 
7   0.104814       3 
8   0.345633       4 
9   0.498004       1 
10   0.131665       2 
11   NaN            3 
12   0.886092       4 
13   0.839767       1 
14   0.257997       2 
15   0.526350       3 

目前我只是使用以下代码行用 0 填充 NaN 数据:

df.fillna(0,inplace=True)

有没有办法使用相应的“id”使用先前的“分数”值填充所有 NaN 数据?

例如,索引#5 处的行的“fraction”具有 NaN 值,并且“id”值为 1。id #1 的先前“fraction”值是 0.141084。

有没有办法用这个值替换,并对整个数据框做这个操作?

谢谢

【问题讨论】:

标签: python pandas


【解决方案1】:

'id' 上执行groupby,然后向前填充ffill

df['fraction'] = df.groupby('id')['fraction'].ffill()

请注意,您可以通过省略 ['fraction'] 一次性对 DataFrame 中的所有列执行相同的处理。对于您的示例数据,输出是相同的:

df = df.groupby('id').ffill()

结果输出:

    fraction  id
0   0.729797   0
1   0.141084   1
2   0.226900   2
3   0.960937   3
4   0.452835   4
5   0.141084   1
6   0.352142   2
7   0.104814   3
8   0.345633   4
9   0.498004   1
10  0.131665   2
11  0.104814   3
12  0.886092   4
13  0.839767   1
14  0.257997   2
15  0.526350   3

【讨论】:

  • 太棒了!正在修补 groupby,但没有考虑前向填充。谢谢!
猜你喜欢
  • 2021-03-18
  • 1970-01-01
  • 1970-01-01
  • 2020-12-27
  • 2022-10-18
  • 2022-10-19
  • 2021-11-12
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多