Использование Pandas для расчета изменения значений ряда дат - PullRequest
0 голосов
/ 22 октября 2019

У меня есть датафрейм, содержащий информацию о продажах продуктов. Он включает в себя номер счета клиента, дату транзакции, стоимость + другие.

Я хочу выяснить, снижаются ли продажи клиентов, и подумал, что если бы я сгруппировал их по кварталам, я мог бы тогда использовать 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. Но это все еще не совсем то, что я хотел, не каждый клиент будет заказывать ежеквартально, некоторые намного больше, некоторые намного меньше. Кроме того, если кто-то выступил в середине четверти, но хорошо в начале и конце четверти, коэффициент все еще в основном отрицательный.

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)    

Есть предложения? На лучший способ справиться с этим?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...