按组创建自定义汇总度量的DataFrame的有效方法

时间:2019-01-31 17:42:39

标签: if-statement pandas-groupby

我想创建一个按商店分组的新数据框,为每个商店创建几列新的摘要。在下面的示例中,我想为每个商店创建四个变量。变量类似于excel中的sumif和countif,但针对每个组(存储)进行计算。

  1. 一个变量,表示所有产品收入超过50美元。
  2. 一个将所有产品收入低于50美元的变量进行汇总的变量
  3. 一个变量,用于统计收入超过50美元的产品数量
  4. 用于计算收入低于50美元的产品数量的变量。

我尝试了各种形式的groupby和agg函数。我认为我应该使用lambda,但是我不确定如何构造该语法以便一次创建多个变量。

import pandas as pd
import numpy as np

n = 20

df = pd.DataFrame({'Store': np.random.choice(['Store_1', 'Store_2'], n),
            'Revenue': (np.random.random(n) * 50 + 10).round(2)
              })
df

因此,我可以轻松计算关于收入的多个汇总指标。我不知道如何创建自定义汇总度量值,例如sumif或countif:

df2 = df.groupby('Store')['Revenue'].agg({'Rev_sum': 'sum', 'Rev_max': 'max'})

对于每个商店(例如store_1,store_2),我都希望如上所述在新数据框中添加四个变量(例如Rev_sum_great_50等)

1 个答案:

答案 0 :(得分:0)

df2 = df.groupby('Store')['Revenue'].agg({'Pos_Rev_Sum': lambda x: np.sum(np.where(x>0)), 'Pos_Rev_Cnt": lambda x: np.count_nonzero(np.where(x>0))})

这是其余前两列的解决方案。