gpt4 book ai didi

python - 插值仍然离开 NaN 的(pandas groupby)

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:17 26 4
gpt4 key购买 nike

我有一个包含一些客户位置的 Dataframe(因此我有一个包含 Customer_id 的列,其他列包含 Lat 和 Lon),我正在尝试根据每个客户插入 NaN。

例如,如果我在这里使用最近的方法进行插值(我在此处弥补了这些值):

 Customer_id   Lat    Lon
A 1 1
A NaN NaN
A 2 2
B NaN NaN
B 4 4

我希望 B 的 NaN 为 4 而不是 2。

我试过了

series.groupby('Customer_id').apply(lambda group: group.interpolate(method = 'nearest', limit_direction = 'both'))

NaN 的数量从 9003 下降到 94。但我不明白为什么它仍然会留下一些缺失值。

我检查过,这 94 个缺失值对应于已经被插入的客户记录。例如,

    Customer_id   Lat
0. A 1
1. A NaN
2. A NaN
3. A NaN
4. A NaN

它将正确插值直到某个值(假设它正确地插值 1、2 和 3),然后将 4 保留为 NaN。

我已尝试将插值限制设置为大于每个客户端的最大记录数,但仍然无法解决。我不知道我的错误在哪里,有人可以帮忙吗?

(我不知道它是否与提及相关,但我为此编造了我自己的 NaN。这是我使用的代码 Replace some values in a dataframe with NaN's if the index of the row does not exist in another dataframe 我认为问题不在这里,但因为我很困惑到问题实际所在的地方,我就把它留在这里)

最佳答案

当您使用nearest 进行插值时,它只能填充中间 缺失值。 (您会注意到这一点,因为当只有 1 个非空值时会出现错误,就像您的示例中那样)。剩余的空值是“边缘”,由 .bfill().ffill() 处理 nearest 逻辑。这也是仅用一个非缺失值“插值”的适当逻辑。

def my_interp(x):
if x.notnull().sum() > 1:
return x.interpolate(method='nearest').ffill().bfill()
else:
return x.ffill().bfill()

df.groupby('Customer_id').transform(my_interp)

# Lat Lon
#0 1.0 1.0
#1 1.0 1.0
#2 2.0 2.0
#3 4.0 4.0
#4 4.0 4.0

关于python - 插值仍然离开 NaN 的(pandas groupby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56941316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com