基于条件的总和聚合

Aggregation with sum based on condition

我有一个像这样的 DataFrame:

df = pd.DataFrame(data= {'month' : [2,7,4,8], 'sales' : [10,40,70,50]})

我想获得按月汇总的销售额总和。但是,我想合并两组月份,第一组是第 1-6 个月(销售额为 80),第二组是第 7-12 个月(销售额为 90)。

最好的方法是什么?

一种方法是创建一个列作为分组键。可以这样做:

import numpy as np
import pandas as pd

df = pd.DataFrame(data= {'month': [2, 7, 4, 8], 'sales' : [10, 40, 70, 50]})
df["foo"] = np.where(df['month'] < 7, 0, 1)
bar = df.groupby(['foo']).sum()

此处,正在创建一个 foo 列,它将根据您定义的条件为每个列分配一个组。即 df['month'] < 7。然后使用这个创建的列,您可以执行经典的 groupby() 并获得总和。


请注意,如果您只想保留销售额列,也可以使用 df.groupby(['foo'])['sales'].agg('sum')

您可以使用 pd.cut 为月份分配标签并在 groupby:

中使用它们
>>> df.groupby(pd.cut(df["month"], bins=[0, 6, 12], labels=["1-6", "7-12"]))["sales"].sum()

month
1-6     80
7-12    90
Name: sales, dtype: int64