在具有多列和多个条件的 Pandas 中分组的最佳方法

问题描述

我正在尝试在多个列和多个条件下汇总数据集。该数据集是交易级别的销售数据,我希望创建诸如最近 3/6/9/12 个月的销售、交易等功能。我知道如何在 sql 中使用 case when 条件如“sum(case when sale_month 在 A 到 B 之间,然后 sales else 0 结束)作为 sales_period”,但无法在 python 中找到一个方法。我尝试这样做的一种方法是创建一个函数,该函数在应用如下条件后返回所有值 -

def my_agg92(x):
   names = {
       net_sales: x[sales].sum(),net_sales_A: x[x[A] == 'a'][sales].sum(),net_sales_B: x[x[B] == 'b'][sales].sum(),cnt_txn: x[(x[sales_month]>=X) & (x[sales_month]<=Y) & (x[type_txn] == Z)][txn_id].nunique()}
   return pd.Series(names,index = [net_sales,net_sales_A,net_sales_B,cnt_txn])

然后我将其应用到 groupby 如下 -

summ_data = data.groupby("groupby_id").apply(my_agg92).reset_index()

这种方式需要很多时间来运行,我相信存在更好的方法。有人可以帮忙吗?

Sample Input dataframe

所需的输出 -

cust_id sale_202010_12 sale_202101_03 pur_txn_202010_12 pur_txn_202101_03
A 590.00 700.00 2 1
B -50.00 0 0 0

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)