【问题标题】:Based on an index, how to fill NaN values with the previous above value? [duplicate]基于一个索引,如何用之前的上述值填充 NaN 值? [复制]
【发布时间】:2018-10-03 20:30:59
【问题描述】:

我有一个大熊猫数据框,在不同的列中有几个 NaN 值。每个NaN 值都有一个关联的ID,我想将这些NaN 值与关联的id 值一起估算。例如,考虑:

ID  COL
1   23
1   NaN
1   NaN
1   NaN
1   NaN
2   21
2   NaN
2   NaN
2   NaN
3   25
3   NaN
3   NaN

如您所见,1 与 23 相关联,因此所有具有 1 的 id 都必须用 23 估算,其他情况也是如此。例如,预期的输出是:

ID  COL
1   23
1   23
1   23
1   23
1   23
2   21
2   21
2   21
2   21
3   25
3   25
3   25

如何使用 pandas 进行这样的操作?,我的问题是我不知道如何处理以前的值并将其替换为它的 id。

更新

在阅读了这个问题和其他相关问题的答案后,我尝试:

df.sort_values(['ID','COL']).ffill()

但是不工作。它不会用与 ID 关联的值替换值,原因是我的 COL 值可能是字符串。知道如何处理这个问题吗?

【问题讨论】:

  • df.COL.ffill()
  • @Wen 哥们,也需要groupby
  • @ayhan 不要说我不是一个言而有信的人。一发现重复就删除答案,谢谢
  • @ayhan 1. 离开是他们的选择。 2. 在我与他们交谈之前,他们一直在回答重复的问题。 3.我,嗯,搜索了一个重复的,找不到一个,决定我还是在别人之前回答。
  • 在发布这个问题之前,我也在寻找解决方案。也许另一个问题的标题没有帮助。

标签: python pandas dataframe group-by


【解决方案1】:

sort_valuesffill

df.COL=df.sort_values(['ID','COL']).COL.ffill()
Out[381]: 
    ID   COL
0    1  23.0
1    1  23.0
2    1  23.0
3    1  23.0
4    1  23.0
5    2  21.0
6    2  21.0
7    2  21.0
8    2  21.0
9    3  25.0
10   3  25.0
11   3  25.0

【讨论】:

  • 感谢您的帮助,但为什么要将值转换为浮点数?
  • @johndoe 因为 nans 是浮点数,所以你的其余数字变成浮点数。试试df.sort_values(['ID','COL']).ffill().astype(int)
  • 再次感谢您的帮助...我刚刚尝试了这个解决方案并不起作用,请注意我的pandas数据框有更多列(实际上有20000列),但我只是想做这个操作用于数据框的两列。
  • @johndoe 检查更新
猜你喜欢
  • 2022-07-22
  • 2018-04-15
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2020-09-14
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多