【问题标题】:Join two dataframe and expand the dataframe with assign the ID加入两个数据框并扩展数据框并分配 ID
【发布时间】:2019-04-04 08:46:44
【问题描述】:

我想将一个数据帧插入另一个数据帧,其中时间键的 ID 似乎跟随时间。怎么做?

我的数据如下所示:

df1
ID  Time
ID1 10:40
ID1 11:00
ID2 11:10
ID2 11:30

df2
Time    X   Y
10:40   45  50
10:50   55  55
11:00   65  60
11:10   75  65
11:20   85  70
11:30   95  75

我的预期结果如下:

ID  Time    X   Y
ID1 10:40   45  50
ID1 10:50   55  55
ID1 11:00   65  60
ID2 11:10   75  65
ID2 11:20   85  70
ID2 11:30   95  75

感谢您的帮助

【问题讨论】:

    标签: pandas csv


    【解决方案1】:

    merge_asof 与日期时间列一起使用,最后使用Series.dt.strftime 将其转换为HH:MM 字符串:

    df1['Time'] = pd.to_datetime(df1['Time'])
    df2['Time'] = pd.to_datetime(df2['Time'])
    
    df = pd.merge_asof(df2, df1, on='Time').assign(Time = lambda x: x['Time'].dt.strftime('%H:%M'))
    print (df)
        Time   X   Y   ID
    0  10:40  45  50  ID1
    1  10:50  55  55  ID1
    2  11:00  65  60  ID1
    3  11:10  75  65  ID2
    4  11:20  85  70  ID2
    5  11:30  95  75  ID2
    

    【讨论】:

    • 是否可以不转换为日期时间?
    • 另一个解决方案应该是df2.merge(df1, how='outer').ffill(),但有点危险 - 必须始终匹配第一行,否则分配的 ID 错误。这取决于数据。
    • 感谢您的建议。我得到了KeyError: 'Time'。那怎么样?
    • @Arief print (df1.columns.tolist())print (df2.columns.tolist()) 是什么?
    • @Arief - 如果 chec 秒,那么是跟踪空间 'Time ',所以使用 df2.columns = df2.columns.str.strip()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2019-01-07
    相关资源
    最近更新 更多