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
我正在尝试从关税数据集中获取energy_fee 和parking_fee。对于会话数据集中的 dt_start 和 dt_end 范围。
示例:session['dt_start'][0] 和 session['dt_end'][0] 落在 tarrif['dt_start'][0] 和 tarrif['dt_end'][0] 的区间内。我想获得energy_fee 和parking_fee。
一些上下文: Tarrif 数据集的范围为 dt_start 和 dt_end,包括能源费和停车费。我必须计算 dt_start 和 dt_end 会话的能源和停车成本。
答案 0 :(得分:0)
您可以合并两个数据框:
df_session.reset_index().merge(df_tariff, on=['dt_start', 'dt_end'], how='left').set_index('index')
答案 1 :(得分:0)
我终于通过将 pandas 与 sqlite3 结合起来找到了解决方案。
我知道我想对数据进行的连接是交叉连接,因为没有可以合并表的公共列。因此,我决定将我的 CSV 导入到 sqlite3 DB 并执行交叉连接。与 pandas 所提供的相比,AS 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)