【问题标题】:Replicate sumif formula in python在python中复制sumif公式
【发布时间】:2021-12-21 10:59:50
【问题描述】:

我正在 Excel 中执行 sumifs 操作,并且需要在 Python 中复制相同的操作。

下面屏幕截图中的“E”列是我的最终要求。 例如,在 AMS 地区:产品 1 销售额为 100K,但调整后变为 116,667。这是通过以下方式完成的:

AMS Territory:

((Sales of Product 1 in AMS)/(sales of product1 + product2 + product3 + product4 in AMS)) * (Sales of 'All' Product in AMS)

i.e., 

(100K/600K)*700K = 116,667

APAC Territory:

((Sales of Product 1 in APAC)/(sales of product1 + product2 + product3 + product4 in APAC)) * (Sales of 'All' Product in APAC

i.e., 

(200K/1000K)*1200K = 240,000


【问题讨论】:

  • 请在您的预期输出中添加一些示例数据,请参阅 minimal reproducible exampleHow to Ask 图片在 stackoverflow 上是不可接受的格式。
  • 请将您的数据作为代码而不是屏幕截图。还包括您尝试过的代码(不是伪代码)和预期的输出。
  • p.s 您可以直接从excel中复制粘贴数据,点击format as code,我们可以直接粘贴到我们的IDE中进行测试。

标签: python excel pandas numpy sumifs


【解决方案1】:

你可以通过groupby得到你需要的东西:

#sort by territory and product
df = df.sort_values(["Territory", "Product"])

#compute total product sales (excluding All)
product_sales = df.groupby(["Territory", df["Product"]!="All"])["Sales"].transform("sum")

#get all sales per territory
all_sales = df["Sales"].where(df["Product"]=="All").ffill()

#compute adjusted sales
df["Adjusted Sales"] = df["Sales"].where(df["Product"]=="All", df["Sales"].div(product_sales).mul(all_sales))

>>> df

  Region Territory    Product    Sales  Adjusted Sales
0   East       AMS        All   700000    7.000000e+05
1   East       AMS  Product 1   100000    1.166667e+05
2   East       AMS  Product 2   200000    2.333333e+05
3   East       AMS  Product 3   150000    1.750000e+05
4   East       AMS  Product 4   150000    1.750000e+05
5   East      APAC        All  1200000    1.200000e+06
6   East      APAC  Product 1   200000    2.400000e+05
7   East      APAC  Product 2   300000    3.600000e+05
8   East      APAC  Product 3   250000    3.000000e+05
9   East      APAC  Product 4   250000    3.000000e+05

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-11
    • 2018-01-16
    相关资源
    最近更新 更多