Python: когортный анализ о расчете ARPU - PullRequest
0 голосов
/ 14 мая 2019

У меня есть фрейм данных с одним столбцом: дохода_сум

revenue_sum
10000.0
12324.0
15534.0
26435.0
45623.0
56736.0
56353.0

И я хочу написать функцию, которая создает все новые столбцы одновременно, которая показывает сумму доходов.

Например, в первой строке в поле'come_1 'должна отображаться сумма первых двух значений с плавающей запятой в выручке;

Во второй строке 'выручка_1' должна отображаться сумма 2-го и 3-го числа с плавающей запятой в сумме выручки.

В первой строке в 'выручке_2' должна отображаться сумма первых 3-х чисел в выручке

revenue_sum   revenue_1    revenue_2
10000.0        22324.0      47858.0
12324.0        27858.0      54293.0
15534.0        41969.0      87592.0
26435.0        72058.0      128794.0
45623.0        102359.0     158712.0
56736.0        113089.0     NaN
56353.0        NaN          NaN

Вот мой код:

'''python

df_revenue_sum1 = df_revenue_sum1.iloc[::-1]

len_sum1 = len(df_revenue_sum1)+1
def func(df_revenue_sum1):
    for i in range(1,len_sum1):
        df_revenue_sum1['revenue_'+'i']=
        df_revenue_sum1['revenue_sum'].rolling(i+1).sum()
return df_revenue_sum1

df_revenue_sum1 = df_revenue_sum1.applymap(func)
'''

И он показываетошибка:

"объект с плавающей точкой не может быть подписан", "произошел в индексе доход_сум"

1 Ответ

1 голос
/ 14 мая 2019

Я думаю, что может быть более простой способ сделать это без цикла for.Скользящая функция панд (http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rolling.html) может делать то, что вам нужно. Она суммирует скользящее окно, заданное параметрами min_periods и window. Мин. Периоды означает, сколько значений должно быть суммировано как минимум. Окно означает, что оно будет суммироваться не болееэто много значений. Применение этого работает следующим образом:

import pandas as pd

# The dataframe provided
d = {
    'revenue_sum': [
        10000.0,
        12324.0,
        15534.0,
        26435.0,
        45623.0,
        56736.0,
        56353.0
    ]
}

# Reverse the dataframe because rolling only looks backwards and
# we want to make a rolling window forward
d1 = pd.DataFrame(data=d)
df = d1[::-1]

# apply rolling summing 2 at a time
df['revenue_1'] = df['revenue_sum'].rolling(min_periods=2, window=2).sum()
# apply rolling window 3 at a time
df['revenue_2'] = df['revenue_sum'].rolling(min_periods=3, window=3).sum()

print(df[::-1])

Это дало мне следующий фрейм данных:

   revenue_sum  revenue_1  revenue_2
0      10000.0    22324.0    37858.0
1      12324.0    27858.0    54293.0
2      15534.0    41969.0    87592.0
3      26435.0    72058.0   128794.0
4      45623.0   102359.0   158712.0
5      56736.0   113089.0        NaN
6      56353.0        NaN        NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...