根据另一个数据框中日期之间的范围合并数据框

2024-09-28 01:24:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想要的最终结果是 会话数据

        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

我正在尝试从电费数据集中获取能源费和停车费。对于会话数据集中的dt_start和dt_end范围

示例:会话['dtu start'][0]和会话['dtu end'][0]在tarrif['dtu start'][0]和tarrif['dtu end'][0]的间隔内。我想要能源费和停车费

一些背景: Tarrif数据集的dt_开始和dt_结束范围包括能源费和停车费。我必须计算dt_开始和dt_结束阶段的能源和停车成本


Tags: 数据iddatadtstartenergyend能源
2条回答

您可以合并两个数据帧:

df_session.reset_index().merge(df_tariff, on=['dt_start', 'dt_end'], how='left').set_index('index')

通过将pandas与sqlite3相结合,我终于找到了解决方案

我知道我想对数据进行的连接是交叉连接,因为没有可以合并表的公共列。因此,我决定将我的CSV导入SQLITE3DB并执行交叉连接。与pandas提供的方法相比,sqlite3具有更好的执行交叉连接的方法

conn = sqlite3.connect("./data/output/library.db")
session.to_sql('session', conn, index=False, if_exists='replace' )
tarrif.to_sql('tarrif', conn, index=False, if_exists='replace') 

qry = '''
select s.id, s.energy, s.minutes,t.energy_fee, t.parking_fee
from session s join tarrif t
WHERE (s.dt_start between t.dt_start and t.dt_end)
and (s.dt_end between t.dt_start and t.dt_end)'''

df = pd.read_sql_query(qry, conn)

相关问题 更多 >

    热门问题