如何根据大熊猫中另一列的地板值对一列中的值求和?

时间:2018-04-21 04:38:45

标签: python pandas pandas-groupby

我有一些具有各种不同价位的销售数据(如下所示)。在许多情况下,这些物品将以非常相似的价格出售,例如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

最后一部分是,我想用大熊猫做这件事,原因有很多,我无法控制。有什么想法吗?

1 个答案:

答案 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