基于条件的总和聚合
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
我有一个像这样的 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