[英]Function equivalent of Excel's SUMIFS()
I have a sales table with columns item
, week
, and sales
.我有一个包含item
、 week
和sales
列的销售表。 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.