【问题标题】:Merge two dataframes with different timestamps如何合并具有不同时间戳的两个不同数据帧?
【发布时间】:2021-09-05 21:06:03
【问题描述】:

我有两个数据框:

df1 =

Time A B C
19:43:58:428 10 2 3
19:44:07:777 5 1.5 -2

df2 =

Time D E
19:43:58:372 2.154 3.5
19:43:58:872 3.14 1.3
19:44:07:372 1.4 2
19:44:07:872 1.76 2.2
19:44:07:910 1.43 2.43

我必须合并这些数据帧,使 df2 的时间最接近 df1 的时间。所以结果 df 将是:

df_result =

Time A B C D E
19:43:58:428 10 2 3 2.154 3.5
19:44:07:777 5 1.5 -2 1.76 2.2

如何使用 pandas 合并这些?

【问题讨论】:

    标签: python python-3.x pandas


    【解决方案1】:

    你可以使用pandas.merge_asof,将nearest传递给方向参数,它将根据最小的差异进行合并。

    df1['Time'] = pd.to_datetime(df1['Time'], format='%H:%M:%S:%f')
    df2['Time'] = pd.to_datetime(df2['Time'], format='%H:%M:%S:%f')
    
    pd.merge_asof(df1, df2, on='Time', direction='nearest')
    

    输出:

                         Time   A    B  C      D    E
    0 1900-01-01 19:43:58.428  10  2.0  3  2.154  3.5
    1 1900-01-01 19:44:07.777   5  1.5 -2  1.760  2.2
    

    您可以使用strftime('%H:%M:%S:%f') 将时间列转换回以前的格式

    PS: merge_asof 要求对数据框中的键进行排序,您可能希望在合并之前对键进行排序。

    【讨论】:

    • 其实我有一个安静的大数据框。我正在按照您回答的方式进行操作,但是出现“ValueError:必须对右键进行排序”错误。
    • 是的,merge_asof 需要对键进行排序。试试看:pd.merge_asof(df1.sort_values(['Time']), df2.sort_values['Time'], on='Time', direction='nearest')
    • 您可以编辑上面的代码以将时间列转换回以前的格式。我正在使用 df_result['Time'] = df_result['Time'].dt.strftime('%H:%M:%S:%f'),但没有成功。
    • 您在尝试时是否遇到任何错误? @Avinash
    • 不,我没有收到任何错误。但时间显示为“1900-01-01 19:43:58.428000”。
    猜你喜欢
    • 2021-01-09
    • 2019-11-19
    • 2021-11-20
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    相关资源
    最近更新 更多