简体   繁体   English

Function 相当于 Excel 的 SUMIFS()

[英]Function equivalent of Excel's SUMIFS()

I have a sales table with columns item , week , and sales .我有一个包含itemweeksales列的销售表。 I wanted to create a week to date sales column ( wtd sales ) that is a weekly roll-up of sales per item.我想创建一周至今的销售列 ( wtd sales ),这是每个项目的每周销售汇总。

I have no idea how to create this in Python.我不知道如何在 Python 中创建它。

I'm stuck at groupby() , which probably is not the answer.我被困在groupby() ,这可能不是答案。 Can anyone help?有人可以帮忙吗?

output_df['wtd sales'] = input_df.groupby(['item'])['sales'].transform(wtd)

As I stated in my comment, you are looking for cumsum() :正如我在评论中所述,您正在寻找cumsum()

import pandas as pd

df = pd.DataFrame({
    'items': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'weeks': [1, 2, 3, 4, 1, 2, 3, 4],
    'sales': [100, 101, 102, 130, 10, 11, 12, 13]
})

df.groupby(['items'])['sales'].cumsum()

Which results in:结果是:

0    100
1    201
2    303
3    433
4     10
5     21
6     33
7     46
Name: sales, dtype: int64

I'm using:我正在使用:

pd.__version__
'1.5.1'
 

Putting it all together:把它们放在一起:

import pandas as pd

df = pd.DataFrame({
    'items': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
    'weeks': [1, 2, 3, 4, 1, 2, 3, 4],
    'sales': [100, 101, 102, 130, 10, 11, 12, 13]
})

df['wtds'] = df.groupby(['items'])['sales'].cumsum()

Resulting in:导致:

  items  weeks  sales  wtds
0     A      1    100   100
1     A      2    101   201
2     A      3    102   303
3     A      4    130   433
4     B      1     10    10
5     B      2     11    21
6     B      3     12    33
7     B      4     13    46 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM