问题描述
我正在尝试在多个列和多个条件下汇总数据集。该数据集是交易级别的销售数据,我希望创建诸如最近 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()
这种方式需要很多时间来运行,我相信存在更好的方法。有人可以帮忙吗?
所需的输出 -
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 (将#修改为@)