python - 插值仍然留下 NaN 的 (pandas groupby)
问题描述
我有一个包含一些客户位置的数据框(所以我有一个带有 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。这是我使用的代码如果 我认为在另一个数据帧中不存在行的索引,则用 NaN 替换数据帧中的一些值问题不在这里,但因为我很困惑问题到底出在哪里,所以我就把它留在这里)
解决方案
当您使用它进行插值时,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 - python pandas中child_id和parent_id值的加法
- amazon-web-services - 如何进行 AWS S3 SSE KMS 密钥轮换?
- java - 外化spring属性文件后找不到Bean SpringTemplateEngine错误
- kendo-ui - 使用 Base-unit 在同一月份绘制两条不同日期的线:月
- gatling - Gatling .sign 问题
- javascript - 递增数字并使用 put 方法保存
- ios - 将字符串与数组一起传递,但使用 Alamofire 在 swift 中将字符串读取为 null
- java - Java中下个月的最后日期
- scala - 在一台机器上使用 spark-submit 在不同机器上运行相同的 JAR 崩溃
- java - Jenkins 中的 Groovy 脚本 - MultipleCompilationErrorsException