【问题标题】:How to add column to existing DataFrame with non matching times?如何将列添加到具有不匹配时间的现有 DataFrame?
【发布时间】:2020-03-10 10:10:30
【问题描述】:

在现有的 DataFrame 中;

2019-12-02 | 1.000000 
2019-12-04 | 1.020100
2019-12-05 | 1.030301
2019-12-06 | 1.040604
2019-12-09 | 1.051010
2019-12-10 | 1.061520

我想添加一个基于现有 DF 或 TS 的新列,但索引不匹配;

2019-12-04  00:00:00 | A
2019-12-05  15:40:00 | B
2019-12-07  00:30:00 | C
2019-12-10  15:00:00 | D

结果;

2019-12-02 | 1.000000 NaN
2019-12-04 | 1.020100 A
2019-12-05 | 1.030301 B
2019-12-06 | 1.040604 C
2019-12-09 | 1.051010 NaN
2019-12-10 | 1.061520 D

现有DataFrame中的间隔也可以小于24小时。

谢谢!

【问题讨论】:

    标签: python pandas dataframe time-series


    【解决方案1】:

    使用merge_asof:

    df = pd.merge_asof(df1, 
                       df2, 
                       left_index=True, 
                       right_index=True, 
                       tolerance=pd.Timedelta(24, 'H'), 
                       direction='forward')
    print (df)
                       A    B
    2019-12-02  1.000000  NaN
    2019-12-04  1.020100    A
    2019-12-05  1.030301    B
    2019-12-06  1.040604  NaN
    2019-12-09  1.051010  NaN
    2019-12-10  1.061520    D
    

    df = pd.merge_asof(df1, 
                       df2, 
                       left_index=True, 
                       right_index=True, 
                       tolerance=pd.Timedelta(25, 'H'), 
                       direction='forward')
    print (df)
                       A    B
    2019-12-02  1.000000  NaN
    2019-12-04  1.020100    A
    2019-12-05  1.030301    B
    2019-12-06  1.040604    C
    2019-12-09  1.051010  NaN
    2019-12-10  1.061520    D
    

    【讨论】:

    • 我认为它不适用于小于 24 小时的间隔或第一个 DF 中不存在的值(如带有 C 的行)..
    • @user7378715 - 答案已编辑,24 小时也不匹配 C,需要 25H
    猜你喜欢
    • 2022-11-16
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2016-01-06
    相关资源
    最近更新 更多