【问题标题】:Pandas populate column 'a' using average of cells directly before and after in column 'b'熊猫使用“b”列之前和之后的单元格平均值填充“a”列
【发布时间】:2020-08-06 00:10:15
【问题描述】:

我有一个时间序列数据集,其中每隔一个时间间隔就会丢失 GPS。

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

在下面的示例中,这将导致在 'timestamp' '06:41:59' 填充列 'AV_latitude' 和 'AV_longitude' 以及之前和之后的位置平均值。

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

任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas cell average


    【解决方案1】:

    Pandas 有处理NaN 值的方法,.fillna。在其他方法中,它支持“前向填充”和“后向填充”,它们的组合将产生所需的结果。

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

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

    【讨论】:

    • 感谢 Marat,这很有魅力。我不知道功能可用,所以感谢您启发我!
    【解决方案2】:

    我不确定您真正想要的是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
    

    【讨论】:

    • 嗨,大卫。谢谢你的协助。这是一个很酷的功能,我可能会有很多用途,但它不能解决我在这里遇到的问题。我确实有那个时间戳的数据,只是没有 GPS 纬度/经度。我希望创建一个平均位置,为所有数据点提供一致的空间上下文。干杯
    猜你喜欢
    • 2021-09-11
    • 1970-01-01
    • 2019-06-11
    • 2018-09-19
    • 1970-01-01
    • 2023-02-17
    • 2017-05-03
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多