在pandas中的日期列上连接两个数据帧

时间:2018-05-17 22:17:26

标签: python pandas dataframe time-series

如何在日期列上加入两个数据帧,其频率相同且不同,如下例所示。

方案1

-d postgres

相同频率,方案2

fast = pd.DataFrame({
    'date': pd.to_datetime(['2018-01', '2018-02', '2018-03',
                            '2018-04', '2018-05', '2018-06']),
    'store': ['A'] * 3 + ['B'] * 3,
    'sales': [3000, 2000, 1800, 1700, 1500, 1600]})

slow = pd.DataFrame({
    'date': pd.to_datetime(['2018-01', '2018-03', '2018-06']),
    'temp': [45, 55, 70]})

alligned_left_fast = ?

alligned_left_slow = ?

不同频率,方案3

unaligned_df1 = pd.DataFrame({
    'date': pd.to_datetime(['2018-01', '2018-02', '2018-03',
                            '2018-04', '2018-05', '2018-06']),
    'store': ['A'] * 3 + ['B'] * 3,
    'sales': [3000, 2000, 1800, 1700, 1500, 1600]})

unaligned_df2 = pd.DataFrame({
    'date': pd.to_datetime(['2018-02-11', periods=6, freq='30D']),
    'temp': [105, 95, 87]})
Unaligned_merged_left_date_index=?

1 个答案:

答案 0 :(得分:0)

您可以将pd.merge_asofdirection参数一起使用。

pd.merge_asof(fast,slow, on='date', direction='backward')

输出:

        date store  sales  temp
0 2018-01-01     A   3000    45
1 2018-02-01     A   2000    45
2 2018-03-01     A   1800    55
3 2018-04-01     B   1700    55
4 2018-05-01     B   1500    55
5 2018-06-01     B   1600    70