gpt4 book ai didi

python - 根据日期连接两个 DataFrame

转载 作者:行者123 更新时间:2023-12-01 01:57:33 27 4
gpt4 key购买 nike

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

  • 两个数据框。两者都使用时间戳格式进行索引。时间段类似,假设从 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 获取插值数据,即每一行。

最佳答案

使用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()

然后你就可以加入他们:

df = df1.join(df2)

请注意,如果您的 GPS 位置是单列中的元组,则可能需要稍微更改此设置。在这种情况下,您可能必须将其分成两列:纬度和经度,以便上采样正常工作。

使用不同的函数可能更有意义,而不是对下采样进行平均。例如,如果您的二氧化氮传感器报告在过去 0.6 秒内检测到了多少二氧化氮,那么您需要 .sum()

关于python - 根据日期连接两个 DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49997700/

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