我有一个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()
但不成功。 伙计们,请帮帮我
答案 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.arange
按3
按datetimes
除以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