Groupby Python中的数据集

时间:2016-07-12 06:04:14

标签: python pandas

我有30年的每日数据。我想计算超过30年的平均每日。例如,我有这样的数据

1/1/2036      0
1/2/2036    73.61180115
1/3/2036    73.77733612
1/4/2036    73.61183929
1/5/2036    73.75443268
1/6/2036    73.58483887
.........
12/22/2065  73.90600586
12/23/2065  74.38092804
12/24/2065  77.76309967

我想计算:

1/1/yyyy     ?
1/2/yyyy     ?
1/3/yyyy     ?
......
12/30/yyyy   ?
12/31/yyyy   ?

我在python中编写了一个代码,但它只计算了第一个月的平均值。我的数据集是10950 x 1,将转换为365 x 1.以下是我的代码:

import pandas as pd

files=glob.glob('*2036-2065*rcp26*.csv*')
RO_act=pd.read_csv('Reservoir storage zones_sohom.csv',index_col=0,parse_dates=True)
for i, fl in enumerate(files):
    df = pd.read_csv(fl, index_col=0,usecols=[0,78],parse_dates=True)
    df1=df.groupby(pd.TimeGrouper(freq='D')).mean()

请帮忙

2 个答案:

答案 0 :(得分:1)

您可以将函数传递给df.groupby,该函数将作用于索引以生成组。所以,对你来说,使用:

df.groupby(lambda x: (x.day,x.month)).mean()

答案 1 :(得分:0)

考虑以下系列s

days = pd.date_range('1986-01-01', '2015-12-31')
s = pd.Series(np.random.rand(len(days)), days)

然后你要找的是:

s.groupby([s.index.month, s.index.day]).mean()

时序

@ juanpa.arrivillaga的回答给出了相同的解决方案,但速度较慢。

enter image description here