我有一个包含产品销售的数据框。包括客户账号、交易日期、价值+其他
我想知道某个客户的销售额是否在下降,我想如果我按季度将他们组合在一起,我可以使用pct_change()来解决这个问题,但这并没有达到我的预期效果
+------------+------------+------------+
| SA_ACCOUNT | SA_TRDATE | SA_TRVALUE |
+------------+------------+------------+
| AAA1 | 2019-01-01 | 65.65 |
| AAA1 | 2019-02-08 | 698.65 |
| AVD2 | 2019-01-05 | 98.28 |
+------------+------------+------------+
我已经开始按日期和帐户分组并合计价值。然后将其重新采样为四分之一,最后将日期拆下,使其成为列标题。这以以下格式呈现了数据
代码:
sales_by_q = new_frame2.groupby(["SA_ACCOUNT","SA_TRDATE"]).sum().reset_index().set_index("SA_TRDATE")[["SA_ACCOUNT","SA_TRVALUE"]].groupby("SA_ACCOUNT").resample("q").sum().unstack().fillna(0)
示例输出:
+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| SA_ACCOUNT | 2017-12-31 | 2018-03-31 | 2018-06-30 | 2018-09-30 | 2018-12-31 | 2019-03-31 | 2019-06-30 | 2019-09-30 |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| AA11 | 0.000 | 0.000 | 12.000 | 4.000 | 0.000 | 3.000 | 0.000 | 0.000 |
| AA99 | 0.000 | 3.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 | 0.000 |
| AAA1 | 171.000 | 407.000 | 78.000 | 23.000 | 23.000 | 20.000 | 70.000 | 208.000 |
| AAC1 | 0.000 | 0.000 | 0.000 | 64.000 | 10.000 | 5.000 | 21.000 | 6.000 |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+
我现在不知道这些价值是否会随着时间的推移而下降(如果客户花费较少或没有),但似乎找不到实现这一点的最佳方法
然后我想我可以算出一条回归线的系数,然后用scikitlearn。但这仍然不完全是我想要的,不是每个客户都会每季度订购一次,有的更多,有的更少。另外,如果有人在中场开始表演波利,但在开始和结束时都很好,COEFF仍然是负面的。p>
from sklearn import linear_model
def calc_vert(x):
df = pd.DataFrame(x).reset_index()
x_vals = np.arange(0,df[df.columns[0]].count()).reshape(-1, 1)
y_vals = df[df.columns[1]]
regr = linear_model.LinearRegression()
regr.fit (x_vals, y_vals)
return regr.coef_
test1["coeff"] = test1.apply(lambda x: calc_vert(x),axis = 1)
有什么建议吗?有更好的方法解决这个问题吗
目前没有回答
相关问题 更多 >
编程相关推荐