Pandas 使用列 'b' 前后单元格的平均值填充列 'a'

Pandas populate column 'a' using average of cells directly before and after in column 'b'

我有一个时间序列数据集,其中每隔一个时间间隔就缺少 GPS。

我希望使用 Pandas 直接使用数据间隙前后的 GPS 平均值来填充这些缺失值。

在下面的示例中,它会导致在 'timestamp' '06:41:59' 处填充 'AV_latitude' 和 'AV_longitude' 列,并直接使用前后位置的平均值。

如果 'AV' 列中的所有单元格都使用与我将使用 'fillna' 合并缺失数据值相同的方法填充,这不是问题。

如有任何帮助,我们将不胜感激!

Pandas 有一个方法来处理 NaN 值,.fillna。在其他方法中,它支持“前向填充”和“后向填充”,将它们组合起来会得到想要的结果。

df[['lat', 'long']] = (
    df[['lat', 'long']].fillna(method='ffill') 
    + df[['lat', 'long']].fillna(method='backfill')
) / 2

作为奖励,这还将处理多个连续的 NaNs

我不确定您真正想要的是 mean 还是您真正想要做的是对数据重新采样。一般来说,后者将是一项更常见的任务。这是我使用的输入数据:

df = pd.DataFrame({'timestamp': {0: '6/16/2020 6:41:58', 1: '6/16/2020 6:42:00'},'latitude': {0: -32.4353472, 1: -32.43535107}})
df['timestamp'] = pd.to_datetime(df['timestamp'])
df

    timestamp           latitude
0   2020-06-16 06:41:58 -32.435347
1   2020-06-16 06:42:00 -32.435351

然后,对数据重新采样:

df = df.resample('s', on='timestamp').mean().reset_index()
df

输出:

    timestamp            latitude
0   2020-06-16 06:41:58  -32.435347
1   2020-06-16 06:41:59  NaN
2   2020-06-16 06:42:00  -32.435351