我有一些具有各种不同价位的销售数据(如下所示)。在许多情况下,这些物品将以非常相似的价格出售,例如79.98和79.99。我想要做的是将所有项目的访问次数和销售额相加到同一美元金额(即最低限额),但也保留原始价格,因为我需要将其用作执行联接的密钥后来。例如,使用下面显示的数据:
product price visits sales conversion
29 12345678 74.98 225 14 0.0622
30 12345678 79.98 302 12 0.0397
31 12345678 79.99 446 19 0.0426
32 12345678 81.98 17 1 0.0588
33 12345678 84.98 11 0 0.0000
34 12345678 84.99 845 52 0.0615
35 12345678 88.98 96 8 0.0833
36 12345678 88.99 81 0 0.0000
37 12345678 89.99 324 13 0.0401
38 12345678 92.98 234 2 0.0085
39 12345678 93.98 97 0 0.0000
40 12345678 94.98 5 0 0.0000
41 12345678 99.99 1069 11 0.0103
产品,sell_price,floor(selling_price),总和(访问),总和(销售)
product, selling_price, floored_price, total_visits, total_sales
12345678, 79.98, 79.00, 527, 26
12345678, 79.99, 79.99, 527, 26
最后一部分是,我想用大熊猫做这件事,原因有很多,我无法控制。有什么想法吗?
答案 0 :(得分:1)
如果我理解正确:
pd.merge_asof(df, \
df.assign(floored_price=df.price.apply(np.floor)). \
groupby('floored_price')[['sales', 'visits']].sum(). \
rename(columns={'sales':'total_sales', 'visits':'total_visits'}). \
reset_index(), \
left_on='price', right_on='floored_price')
# product price visits sales conversion floored_price total_sales total_visits
# 0 12345678 74.98 225 14 0.0622 74.0 14 225
# 1 12345678 79.98 302 12 0.0397 79.0 31 748
# 2 12345678 79.99 446 19 0.0426 79.0 31 748
# 3 12345678 81.98 17 1 0.0588 81.0 1 17
# 4 12345678 84.98 11 0 0.0000 84.0 52 856