【问题标题】:Concatenating two DataFrames with respect to dates根据日期连接两个 DataFrame
【发布时间】:2018-04-24 09:11:50
【问题描述】:

我认为我的问题涉及几个部分。 我有什么?

  • 两个数据帧。两者都使用时间戳格式进行索引。时间段是相似的,比如说从 14:00 到 18:00 以及从 13:30 到 18:30。但是时间间隔不同(一个数据帧每 3 秒有一个数据,一个数据帧的时间间隔不确定,大约为 0.6 秒)。数据帧不同,一个包括 GPS 坐标(2 列 + 索引),一个包括 NO2 浓度(1 列 + 索引)。

我到底想要什么?

  • 一个包含所有 3 列 (GPS + NO2) 的数据帧(再次使用时间戳索引)。我想将索引的时间间隔设置为 1 秒。这意味着,两个数据帧都必须进行插值,因为两者可能都没有值,例如 15:30.56(但在 15:30.55.635 和 15:30.58.001)

到目前为止我尝试了什么?

  • 合并两个数据帧。但我得到的是一个数据框,现在包含我想要的所有 3 列,但索引是 NO2 数据集的时间,只有 NO2 的列被正确填充(其他两个包括 NaN)

这是代码行:

allTheData = pd.concat([gpsDataFrame, no2DataFrame], axis=1)

我是 Pandas 的新手,对 Python 比较陌生。希望你能帮助我完成这两个步骤:

  1. 创建一个数据帧“allTheData”,其中包括按时间顺序排列的所有测量时间(来自 gps 或 No2)和正确的数据。例如,如果两个数据框中都有来自 15:30.05 的数据,则只添加一行并包括所有 3 列;如果在 15:30.07 只有来自 gps 的数据,则包括 gps 数据并将 No2 设置为 NaN 或其他内容。

  2. 对这些值进行插值,以便我可以选择一个 1 秒的间隔,然后每 1 秒从 gps 和 no2 获取插值数据,因此每一行。

【问题讨论】:

    标签: python pandas dataframe timestamp


    【解决方案1】:

    使用pandas.resample 调整两个数据帧,使其具有与索引相同的时间戳:

    import pandas as pd
    import numpy as np
    
    # generate some sample data according to your question
    date1 = pd.date_range("14:00", "18:00", freq="3S")
    df1 = pd.DataFrame({"time": date1, "gps": np.random.rand(len(date1))})
    date2 = pd.date_range("13:30", "18:30", freq="600ms")
    df2 = pd.DataFrame({"time": date2, "no2": np.random.rand(len(date2))})
    
    # set the timestamps as index
    df1 = df1.set_index("time")
    df2 = df2.set_index("time")
    
    final_freq = "1S"
    
    # upsample df1, interpolating
    df1 = df1.resample(final_freq)
    df1 = df1.interpolate(method='linear')    # without this, these entries are NaN
    
    # downsample df2, averaging
    df2 = df2.resample(final_freq).mean()
    

    那么你可以join他们:

    df = df1.join(df2)
    

    请注意,如果您的 gps 位置是单列中的元组,您可能需要稍微更改一下。在这种情况下,您可能必须将其分成两列,纬度和经度,才能进行上采样。

    与其对下采样进行平均,不如使用不同的函数。例如,如果您的 NO2 传感器报告它在过去 0.6 秒内看到了多少 NO2,那么您需要.sum()

    【讨论】:

    • 超级好用又简单。非常感谢!
    猜你喜欢
    • 2022-07-25
    • 2020-01-07
    • 2018-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多