Python 根据另一个数据框中日期之间的范围合并数据框
会话数据Python 根据另一个数据框中日期之间的范围合并数据框,python,pandas,datetime-format,Python,Pandas,Datetime Format,会话数据 tariff data dt_start dt_end energy_fee parking_fee 0 2020-05-27 13:00:00+02:00 2020-05-27 15:00:00+02:00 0.50 0.50 1 2020-05-27 15:00:00+02:00 2020-05-27 20:00:00+02:00 0.42 0.50 2 2020-05-27 20:00:0
tariff data
dt_start dt_end energy_fee parking_fee
0 2020-05-27 13:00:00+02:00 2020-05-27 15:00:00+02:00 0.50 0.50
1 2020-05-27 15:00:00+02:00 2020-05-27 20:00:00+02:00 0.42 0.50
2 2020-05-27 20:00:00+02:00 2020-05-27 21:00:00+02:00 0.16 0.10
3 2020-05-27 21:00:00+02:00 2020-05-27 22:00:00+02:00 0.50 0.50
4 2020-05-27 22:00:00+02:00 2020-05-28 01:00:00+02:00 0.38 0.32
id dt_start dt_end energy
0 1 2020-05-27 13:00:00+02:00 2020-05-27 13:12:00+02:00 2.00
1 1 2020-05-27 13:00:00+02:00 2020-05-27 13:25:00+02:00 0.30
2 1 2020-05-27 13:00:00+02:00 2020-05-27 13:27:00+02:00 4.50
3 1 2020-05-27 13:00:00+02:00 2020-05-27 13:01:00+02:00 2.03
4 1 2020-05-27 13:00:00+02:00 2020-05-27 13:26:00+02:00 3.69
我想要的最终结果是
会话数据
tariff data
dt_start dt_end energy_fee parking_fee
0 2020-05-27 13:00:00+02:00 2020-05-27 15:00:00+02:00 0.50 0.50
1 2020-05-27 15:00:00+02:00 2020-05-27 20:00:00+02:00 0.42 0.50
2 2020-05-27 20:00:00+02:00 2020-05-27 21:00:00+02:00 0.16 0.10
3 2020-05-27 21:00:00+02:00 2020-05-27 22:00:00+02:00 0.50 0.50
4 2020-05-27 22:00:00+02:00 2020-05-28 01:00:00+02:00 0.38 0.32
id dt_start dt_end energy
0 1 2020-05-27 13:00:00+02:00 2020-05-27 13:12:00+02:00 2.00
1 1 2020-05-27 13:00:00+02:00 2020-05-27 13:25:00+02:00 0.30
2 1 2020-05-27 13:00:00+02:00 2020-05-27 13:27:00+02:00 4.50
3 1 2020-05-27 13:00:00+02:00 2020-05-27 13:01:00+02:00 2.03
4 1 2020-05-27 13:00:00+02:00 2020-05-27 13:26:00+02:00 3.69
我正在尝试从电费数据集中获取能源费和停车费。对于会话数据集中的dt_start和dt_end范围
示例:会话['dtu start'][0]和会话['dtu end'][0]在tarrif['dtu start'][0]和tarrif['dtu end'][0]的间隔内。我想要能源费和停车费
一些背景:
Tarrif数据集的dt_开始和dt_结束范围包括能源费和停车费。我必须计算dt_开始和dt_结束会话的能源和停车成本。您可以合并两个数据帧:
id dt_start dt_end energy energy_fee parking_fee
0 1 2020-05-27 13:00:00+02:00 2020-05-27 13:12:00+02:00 2.00 0.50 0.50
1 1 2020-05-27 13:00:00+02:00 2020-05-27 13:25:00+02:00 0.30 0.50 0.50
2 1 2020-05-27 13:00:00+02:00 2020-05-27 13:27:00+02:00 4.50 0.50 0.50
3 1 2020-05-27 13:00:00+02:00 2020-05-27 13:01:00+02:00 2.03 0.50 0.50
4 1 2020-05-27 13:00:00+02:00 2020-05-27 13:26:00+02:00 3.69 0.50 0.50
通过将pandas与sqlite3相结合,我终于找到了解决方案 我知道我想对数据进行的连接是交叉连接,因为没有可以合并表的公共列。因此,我决定将我的CSV导入SQLITE3DB并执行交叉连接。与pandas提供的方法相比,sqlite3具有更好的执行交叉连接的方法
df_session.reset_index().merge(df_tariff, on=['dt_start', 'dt_end'], how='left').set_index('index')
数据帧输出为能源费,停车费输出为NaN。我试着用“正确”和“外部”来解释,但是没有运气,开始,结束,能源,能源,能源,停车费,费用指数0 1 2020-05-27 13:00+02:00 2020-05-27 13:00+02:00 2:00南南1 1 2020-05-27 13:00+02:00 2020-05-27 13:00+02:00南2:00 2020-05-27 13:00+02:00南2:00南2:00 2020-05-27 13:00+02:00南4.503 1 2020-05-27 13:00:00+02:00 2020-05-27 13:01:00+02:00 2.03楠楠4 1 2020-05-27 13:00+02:00 2020-05-27 13:26:00+02:00 3.69楠楠楠楠您想按行对行或重叠间隔合并吗?这里没有可合并的公共列。问题是,列dt_start和st_end具有相同的名称,但其中的值不相同。关税数据具有时间范围。在会话数据中,它是所使用的会话。