首页 > 解决方案 > Python:关于计算 ARPU 的群组分析

问题描述

我有一个包含一列的数据框:revenue_sum

revenue_sum
10000.0
12324.0
15534.0
26435.0
45623.0
56736.0
56353.0

我想编写一个函数,一次创建所有新列,显示收入总和。

例如,'revenue_1'中的第一行应该显示revenue_sum中前两个浮动的总和;

“revenue_1”中的第二行应显示收入总和中第 2 次和第 3 次浮动的总和。

“revenue_2”中的第一行应显示revenue_sum 中前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)
'''

它显示了错误:

"'float' 对象不可下标", '发生在索引收入_sum'

标签: pythondataframe

解决方案


我认为可能有一种更简单的方法可以在没有 for 循环的情况下做到这一点。熊猫功能滚动(http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rolling.html)可能会满足您的需求。它沿 min_periods 和 window 参数指定的滑动窗口求和。最小周期意味着它应该至少求和多少个值。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

推荐阅读