我在一家物流公司工作,我们为客户提供B2C交付服务。因此,我们有一个费率卡以表格形式列出交付/交易清单,包裹的重量和交付地点。
我看到这里回答了很多SUMIFS问题,但与我所需的非常不同。
第一个“交易数据框”包含“交易ID”,“重量”,“岛屿”,“类别”。
我看到这里回答了很多SUMIFS问题,但与我所需的非常不同。
第一个“交易数据框”包含“交易ID”,“重量”,“岛屿”,“类别”。
transaction weight island category
1 0.3 luzon regular
2 0.5 visayas express
3 0.5 luzon express
4 0.4 visayas regular
5 1.7 visayas regular
6 1.5 luzon regular
第二个费率卡数据框
包含类别
、最小重量
、最大重量
和费用
category island min weight max weight fee
regular luzon 0 0.5 30
regular luzon 0.51 3.0 40
express luzon 0 3.0 45
regular visayas 0 0.5 50
regular visayas 0.51 3.0 60
express visayas 0 3.0 65
我希望能根据包裹重量和地址计算费用。结果应该是交易数据框
。
transaction weight island category fee
1 0.3 luzon regular 30
2 0.5 visayas express 65
3 0.5 luzon express 45
4 0.4 visayas regular 50
5 1.7 visayas regular 60
6 1.5 luzon regular 40
以下是在 EXCEL
中计算 费用
的公式:
=SUMIFS(rate_card.fee, rate_card.min_weight <= transaction.weight, rate_card.max_weight >= transaction.weight, rate_card.island = transaction.island, rate_card.category = transaction.category)
我想使用Pandas
在Python
中复制这个特定的公式。
希望有人能够在一个月内为我的问题提供解决方案。
transaction.merge(rate_card, on=['category', 'island'])
运行良好,但是我在这一行.query('weight.between(
min weight,
max weight)')
中遇到了错误。 - lester pajapandas < 0.25.0
版本,您可以通过print(pd.__version__)
进行检查。请查看我提供的第二个解决方案,它应该可以工作,因为它不使用.query
,并且比您接受的其他答案快得多,因为这些都是矢量化方法。@lesterpaja - Erfan