我有两个数据框示例数据:

created_at             PM 2.5  PM 10     entry_id
2018-06-13 16:11:43    4.67   5.17        20
2018-06-14 11:16:43    5.01   8.05        21


                          action       end_at
done_at
2018-06-13 10:15:00  action 1           Nan
2018-06-11 12:15:00  action 2           Nan


我想根据离第一个数据帧最近的时间将“ PM 10”值添加到第二个帧。新的数据框应该看起来像

                          action       end_at   PM 10
done_at
2018-06-13 10:15:00  action 1           Nan      5.17
2018-06-11 12:15:00  action 2           Nan      5.17


问题在于时间不匹配。这可能吗?

最佳答案

您可以将merge_asof用于direction='nearest'。根据示例数据帧的格式,我假设done_at是索引,因此您必须首先重置索引:

设定:

>>> df1
           created_at  PM 2.5  PM 10  entry_id
0 2018-06-13 16:11:43    4.67   5.17        20
1 2018-06-14 11:16:43    5.01   8.05        21
>>> df2
                       action end_at
done_at
2018-06-13 10:15:00  action 1    Nan
2018-06-11 12:15:00  action 2    Nan

df1['created_at'] = pd.to_datetime(df1['created_at'])

df2.index = pd.to_datetime(df2.index)


合并:

new_df = (pd.merge_asof(df2.reset_index().sort_values('done_at'),
              df1[['created_at','PM 10']],left_on='done_at',
              right_on='created_at', direction='nearest')
          .drop('created_at',axis=1))

>>> new_df
              done_at    action end_at  PM 10
0 2018-06-11 12:15:00  action 2    Nan   5.17
1 2018-06-13 10:15:00  action 1    Nan   5.17

关于python - Pandas -通过另一个数据框索引数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53678606/

10-11 01:00
查看更多