如何在保持所有具有重复指数的观测结果的同时应用滚动平均函数



我有一个数据帧,它有重复的时间索引,我想获得前两天的平均值(我不想放弃任何观察结果;它们都是我需要的信息(。我查看了panda文档,并阅读了以前关于Stackoverflow的文章(例如对panda中具有重复索引的数据帧应用滚动平均函数(,但找不到解决方案。下面是一个示例,说明我的数据帧的外观以及我正在寻找的输出。提前谢谢。

数据:

import pandas as pd
df = pd.DataFrame({'id': [1,1,1,2,3,3,4,4,4],'t': [1, 2, 3, 2, 1, 2, 2, 3, 4],'v1':[1, 2, 3, 4, 5, 6, 7, 8, 9]})

输出:

tv2
1-
2-
34.167
45
56.667

连接输入帧的两个副本的粗略建议,其中't'中的值分别替换为't+1'和't+2'的值。这样,列"t"的含义就变成了"t";目标日期";。

设置:

import pandas as pd
df = pd.DataFrame({'id': [1,1,1,2,3,3,4,4,4],
't': [1, 2, 3, 2, 1, 2, 2, 3, 4],
'v1':[1, 2, 3, 4, 5, 6, 7, 8, 9]})

实施:

len = df.shape[0]
incr = pd.DataFrame({'id': [0]*len, 't': [1]*len, 'v1':[0]*len}) # +1 in 't'
df2 = pd.concat([df + incr, df + incr + incr]).groupby('t').mean()
df2 = df2[1:-1] # Drop the days that have no full values for the 2 previous days 
df2 = df2.rename(columns={'v1': 'v2'}).drop('id', axis=1)

输出:

v2 
t          
3  4.166667 
4  5.000000 
5  6.666667 

感谢您的帮助。我最终使用了groupby+滚动(2天(,然后删除重复项(保留最后一次观察(。

最新更新