python - 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'
解决方案
我认为可能有一种更简单的方法可以在没有 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
推荐阅读
- amazon-web-services - 如何在 terraform iam 策略中添加条件?基于一些价值
- javascript - 如何为搜索按钮提供所需的点击效果
- combobox - 如何使用 GTK4 使可滚动组合框可滚动?
- wso2-am - wso2 apim 自动生成令牌
- grafana - Grafana Loki 时间戳,LogQL 查询问题
- android - 无法安装应用程序:INSTALL_PARSE_FAILED_MANIFEST_MALFORMED android 12
- heroku - Heroku.yml 文件。如何从 .env 文件传递环境变量?
- .net - 部署 Asp.net 5 应用程序失败并显示“或者,安装框架版本 '5.0.0'”
- postgresql - PostgreSQL:当在 tsvector 中首先匹配词位时,全文搜索会增加排名
- inno-setup - 即使在使用 Inno Download Plugin 下载失败后继续安装