python - 在数据框中创建滚动平均值直到设定点
问题描述
我有一个这样的数据框:
month val1 val2 val3
1 2 3 5
2 3 4 7
3 5 1 2
4 7 4 3
5 2 6 4
6 2 2 2
我的初始列中的最后一个月在这里是 6,但可以是从第 1 个月到第 12 个月的任何时间。我想根据最后 2 个值计算滚动平均值,直到第 12 个月的每个 val 列。得到这样的东西:
month val1 val2 val3
1 2 3 5
2 3 4 7
3 5 1 2
4 7 4 3
5 2 6 4
6 2 2 2
7 2 4 3
8 2 3 2.5
9 2 3.5 2.75
10 2 3.25 2.63
11 2 3.38 2.69
12 2 3.32 2.66
解决方案
定义以下函数,根据最后 2 行生成当年剩余时间的行:
def getRest(last2):
last2 = last2.set_index('month')
lastMonth = last2.index[1]
rv = []
for mnth in range(lastMonth, 12):
newRow = last2.mean()
newRow.name = mnth + 1
rv.append(newRow)
last2 = last2.drop([mnth - 1])
last2 = last2.append(newRow)
return rv
然后通过以下方式调用它,与原始 DataFrame 连接:
pd.concat([df, pd.concat(getRest(df.iloc[-2:]), axis=1).T.reset_index()
.rename(columns={'index': 'month'})], ignore_index=True)
结果是:
month val1 val2 val3
0 1 2.0 3.0000 5.00000
1 2 3.0 4.0000 7.00000
2 3 5.0 1.0000 2.00000
3 4 7.0 4.0000 3.00000
4 5 2.0 6.0000 4.00000
5 6 2.0 2.0000 2.00000
6 7 2.0 4.0000 3.00000
7 8 2.0 3.0000 2.50000
8 9 2.0 3.5000 2.75000
9 10 2.0 3.2500 2.62500
10 11 2.0 3.3750 2.68750
11 12 2.0 3.3125 2.65625
如果需要,将此结果保存在原始变量或另一个变量下。
推荐阅读
- python - 如何知道哪种算法技术或深度学习模型最适合某些特定数据集
- python - csv Pandas datetime 将时间转换为秒
- php - 如何在“编辑配置文件”部分添加可更新的输入字段以显示“user_pass”加密数据?
- javascript - 单击按钮以显示类别时,如何对对象数组进行排序?
- reactjs - 如何创建动态反应组件
- python - Django:sendgrid 电子邮件是否应该始终从 Celery 发送?
- python - 如何使用日期和数据列在 python 中访问或调用或提取单变量时间序列数据的元素
- php - 无法在 PHP 中启用 mb_string
- java - Java EE 中的无状态单例
- grammar - 使用 Perl 6 语法在原始正则表达式中传递变量