熊猫:滚动意味着不工作

时间:2018-05-13 07:19:00

标签: python pandas

我有一个pandas数据框如下:

         Dates  Var_1   Var_2
0   2018-01-09  612.0  368.0  
1   2018-01-10  348.0  348.0  
2   2018-01-11  350.0  337.0  
3   2018-01-12  335.0  337.0  
4   2018-01-13  334.0 900.0  
5   2018-01-14  325.0  325.0 
6   2018-01-15  580.0  317.0 
7   2018-01-16  334.0 900.0  
8   2018-01-17  325.0  325.0 

我试图计算每列的每3个滚动元素的平均值。 例如:

mean of 2018-01-09, 2018-01-10, 2018-01-11 >> 2018-01-10
mean of 612.0, 348.0, 350.0 >> 436.66

然后,输出3 rows by 2 columns pandas dataframe。

我试过:

result = df.set_index('Dates').rolling(3).mean().reset_index()

但不成功。 伙计们,请帮帮我

2 个答案:

答案 0 :(得分:0)

import pandas as pd

data = {'Dates': ['2018-01-09', '2018-01-10', '2018-01-11', '2018-01-12', '2018-01-15', '2018-01-16', '2018-01-17'],
        'var1': [612, 348, 350, 335, 334, 325, 580]}
df = pd.DataFrame(data)

result = df['var1'].rolling(window=3).mean()

很抱歉我的第一个回复 - rolling_mean()已被弃用,所以我想完全替换它。这对我有用。

答案 1 :(得分:0)

您可np.arange3datetimes除以np.int64,如果想要nanoseconds,则需要转换为print (np.arange(len(df))) [0 1 2 3 4 5 6 7 8] print (np.arange(len(df)) // 3) [0 0 0 1 1 1 2 2 2] df['Dates'] = pd.to_datetime(df['Dates']).astype(np.int64) print (df) Dates Var_1 Var_2 0 1515456000000000000 612.0 368.0 1 1515542400000000000 348.0 348.0 2 1515628800000000000 350.0 337.0 3 1515715200000000000 335.0 337.0 4 1515801600000000000 334.0 900.0 5 1515888000000000000 325.0 325.0 6 1515974400000000000 580.0 317.0 7 1516060800000000000 334.0 900.0 8 1516147200000000000 325.0 325.0 以获取df = df.groupby(np.arange(len(df)) // 3).mean() df['Dates'] = pd.to_datetime(df['Dates']) print (df) Dates Var_1 Var_2 0 2018-01-10 436.666667 351.000000 1 2018-01-13 331.333333 520.666667 2 2018-01-16 413.000000 514.000000 中的原生unix日期时间Dates 1}}并最后转换回来:

df = df.groupby(np.arange(len(df)) // 3).mean()
print (df)
        Var_1       Var_2
0  436.666667  351.000000
1  331.333333  520.666667
2  413.000000  514.000000
Mongod

如果省略转换,则Mongod列会被静默删除,因为groupby

node