使用Pandas计算日期序列值的变化

2024-09-26 22:52:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含产品销售的数据框。包括客户账号、交易日期、价值+其他

我想知道某个客户的销售额是否在下降,我想如果我按季度将他们组合在一起,我可以使用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)    

有什么建议吗?有更好的方法解决这个问题吗


Tags: 数据dfindex客户saaccountresetsum

热门问题