熊猫根据时间戳合并



我有两个数据帧,其中第一个df1包含销售数据,例如

Item    Revenue    Date
ring    200        2018-05-21
led     51         2018-09-18
ring    600        2018-12-25

第二个df2包含每个项目的卖方分配。请注意,分配可能会随时间而更改,并且会保留历史记录

Item    Seller    Since_when
led     Mike      2018-01-01
ring    John      2018-01-01
ring    Mike      2018-12-01

这个想法是通过日期规则合并Item的两个数据帧,以便将销售分配给当时实际销售该商品的卖家,从而产生

Item    Revenue    Date          Seller
ring    200        2018-05-21    John
led     51         2018-09-18    Mike
ring    600        2018-12-25    Mike (Mike started selling rings on December)

有没有办法告诉pd.merge获取第二个数据帧的最新行?

编辑

这是代码:

import pandas as pd
m1 = pd.DataFrame([['ring', 200, 2018, 5, 21], ['led', 51, 2018, 9, 18], ['ring', 600, 2018, 12, 25]])
m1.columns = ['item', 'revenue', 'año', 'mes', 'dia']
m1['date'] = m1['año'].astype(str) + '-' + m1['mes'].astype(str) + '-' + m1['dia'].astype(str)
m2 = pd.DataFrame([['led', 'Mike', '2018-01-01'], ['ring', 'John', '2018-01-01'], ['ring', 'Mike', '2018-12-01']])
m2.columns = ['item', 'persona', 'fecha']
m = (pd.merge_asof(m1.sort_values('date'), m2.sort_values('fecha'),
                   by='item', left_on='date', right_on='fecha')
       .drop(columns='fecha'))

对于精确键和最近键的组合(过去(,请使用 pd.merge_asof 。默认方向为 'backward'

import pandas as pd
m = (pd.merge_asof(df1.sort_values('Date'), df2.sort_values('Since_when'),
                   by='Item', left_on='Date', right_on='Since_when')
       .drop(columns='Since_when'))

输出:m

   Item  Revenue       Date Seller
0  ring      200 2018-05-21   John
1   led       51 2018-09-18   Mike
2  ring      600 2018-12-25   Mike

最新更新