python - 使用“滚动”功能时如何移动平均线?
问题描述
我有以下DataFrame df:
TIME DELAY
0 2016-01-01 06:30:00 0
1 2016-01-01 14:10:00 2
2 2016-01-01 07:05:00 2
3 2016-01-01 11:00:00 1
4 2016-01-01 10:40:00 0
5 2016-01-01 08:10:00 7
6 2016-01-01 11:35:00 2
7 2016-01-02 13:50:00 2
8 2016-01-02 14:50:00 4
9 2016-01-02 14:05:00 1
正如@jezrael 在此线程中所建议的那样,我使用以下代码来计算过去 2 小时的滚动平均值。
df["TIME"] = pd.to_datetime(df["TIME"])
df = df.sort_values('TIME').set_index('TIME')
df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean()
print (df)
这就是我得到的:
DELAY DELAY_LAST2HOURS
TIME
2016-01-01 06:30:00 0 0.000000
2016-01-01 07:05:00 2 1.000000
2016-01-01 08:10:00 7 3.000000
2016-01-01 10:40:00 0 0.000000
2016-01-01 11:00:00 1 0.500000
2016-01-01 11:35:00 2 1.000000
2016-01-01 14:10:00 2 2.000000
2016-01-02 13:50:00 2 2.000000
2016-01-02 14:05:00 1 1.500000
2016-01-02 14:50:00 4 2.333333
但是,是否可以移动滚动平均值以便不考虑当前行。这是前四行的预期输出示例:
2016-01-01 06:30:00 0 0.000000
2016-01-01 07:05:00 2 0.000000
2016-01-01 08:10:00 7 1.000000
2016-01-01 10:40:00 0 3.000000
解决方案
如果要移动 1 行,请使用:
df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean().shift().fillna(0)
print (df)
DELAY DELAY_LAST2HOURS
TIME
2016-01-01 06:30:00 0 0.0
2016-01-01 07:05:00 2 0.0
2016-01-01 08:10:00 7 1.0
2016-01-01 10:40:00 0 3.0
2016-01-01 11:00:00 1 0.0
2016-01-01 11:35:00 2 0.5
2016-01-01 14:10:00 2 1.0
2016-01-02 13:50:00 2 2.0
2016-01-02 14:05:00 1 2.0
2016-01-02 14:50:00 4 1.5
编辑:熊猫 0.24.0 解决方案 -fill_value
参数shift
:
df["DELAY_LAST2HOURS"] = df["DELAY"].rolling("2H").mean().shift(fill_value=0)
print (df)
DELAY DELAY_LAST2HOURS
TIME
2016-01-01 06:30:00 0 0.0
2016-01-01 07:05:00 2 0.0
2016-01-01 08:10:00 7 1.0
2016-01-01 10:40:00 0 3.0
2016-01-01 11:00:00 1 0.0
2016-01-01 11:35:00 2 0.5
2016-01-01 14:10:00 2 1.0
2016-01-02 13:50:00 2 2.0
2016-01-02 14:05:00 1 2.0
2016-01-02 14:50:00 4 1.5
推荐阅读
- swift - NavigationBackButton 和 List-headline 和 NavigationBackButton 之间的空格
- visual-studio - docker-compose 与 Visual Studio 混合 Windows 和 Unix 路径
- mysql - 这可以用子查询来完成吗?
- reactjs - 无法将 React 状态设置为对象数组
- javascript - React Native Expo MapView - 将标记详细信息传递给扩展的底部视图
- vue.js - Vue - 将带有冒号的道具传递到组件时出现问题
- python - 用 0 替换每个字符串值
- java - How to get selective columns in Export Csv in Spring boot
- php - json_decode 不带引号的值
- android - 无法在 Mac 的设备和模拟器中运行我的 Android 应用程序