大熊猫根据条件合并

时间:2019-07-17 13:53:36

标签: python python-3.x

我有两个大数据框,都具有datetime列。其中一种日期时间格式为%Y-%m-%dT%H:%M:%S,另一种采用毫秒格式:%Y-%m-%dT%H:%M:%S.%f。如何基于部分datetime列(基于秒联接)有效地有效联接这两个数据框?

我知道我们可以使用熊猫合并功能或类似的东西

df1.merge(df2, left_on=['df1_column'], right_on=['df2_column'])

但是有没有一种方法可以自定义此合并,以便我们可以基于左侧的一列和右侧的另一列的一部分来连接两个数据框(无需在数据框中添加任何其他列)?

    import pandas as pd

    df1 = pd.DataFrame({'datetime_s': ['2018-09-09T12:25:26', '2018-09-09T12:25:27','2018-09-09T12:25:28']\
                    ,'value': [1, 2, 3]})
    df2 = pd.DataFrame({'datetime_m': ['2018-09-09T12:25:26.780', '2018-09-09T12:25:26.650', '2018-09-09T12:25:27.320']\
                    ,'value': [5, 6, 7]})
    # add something to the following line to merge them based on the second
    df1.merge(df2, left_on=['datetime_s'], right_on=['datetime_m'])

输出应为:

datetime_s             datetime_m                 df1.value   df2.value
2018-09-09T12:25:26    2018-09-09T12:25:26.780      1           5
2018-09-09T12:25:26    2018-09-09T12:25:26.650      1           6
2018-09-09T12:25:27    2018-09-09T12:25:27.320      2           7

1 个答案:

答案 0 :(得分:0)

怎么样:

df1.merge(df2, left_on=df1.df1_column.apply(lambda x :x.second), 
              right_on=df2.df2_column.apply(lambda x : x.second))