我有一个数据框显示1973年至2013年间的每日降雨量,如下所示:
tp1
time
1973-04-01 0.1
1973-07-01 0.4
1973-08-01 0.0
1973-12-01 0.5
1973-01-17 0.0
...
2013-10-09 0.0
2013-11-09 0.2
2013-12-09 0.0
2013-09-13 0.4
2013-09-14 0.0
[6432 rows x 1 columns]
我试图找出每年每个月的最大日降雨量,然后取多年来每个月的平均值,因此最终的数据报将仅包含以下格式的12行:
Average of Maximum Daily Rainfall in each Month
Jan x
Feb x
March x
April x
May x
June x
Jul x
....
我尝试了以下命令:
data = df.groupby(df.index.month).max()
然而,我认为这是在绘制最大值的最大值,而不是我想要的最大值的平均值。
您可以首先groupby年
和月
以获得月份的最大值,然后groupby月
以获得年份的平均值。
out = df.groupby(df.index.strftime('%Y-%m')).max()
out.index = pd.to_datetime(out.index)
print(out)
tp1
1973-01-01 0.0
1973-04-01 0.1
1973-07-01 0.4
1973-08-01 0.0
1973-12-01 0.5
2013-09-01 0.4
2013-10-01 0.0
2013-11-01 0.2
2013-12-01 0.0
res = out.groupby(out.index.strftime('%b')).mean()
print(res)
tp1
Apr 0.10
Aug 0.00
Dec 0.25
Jan 0.00
Jul 0.40
Nov 0.20
Oct 0.00
Sep 0.40
####重置索引
df=df.reset_index(). rename(列={'索引':'时间戳'})
####(可选)在时间戳为str格式的情况下(转换为datetime格式)
df['时间戳']=pd.to_datetime(df['时间戳'],格式='%Y-%m-%d%H:%M:%S')
####得到月份和年份
从日期时间导入日期时间
df['月']=df['时间戳']. application(lambda x:x.strftime('%b'))
df['年']=df['时间戳']. application(lambda x:x.strftime('%Y'))
####获得每个month_year的最大雨量
df2=df. groupby(['月','年']).max()['tp1'].reset_index()
####根据月份平均
df2=df2. groupby('月').reset_index()
####注意,我没有尝试上面的代码,但希望你能从中得到一些想法。TQ
我认为你想按年和月分组来取最大值,然后按月分组来取平均值:
df = pandas.DataFrame(
{'tp1': [.1, .4, 0, .5, .0, .0, .2, .0, .4, .0]},
index = pandas.to_datetime([
'1973-04-01',
'1973-07-01',
'1973-08-01',
'1973-12-01',
'1973-01-17',
'2013-07-09',
'2013-08-09',
'2013-12-09',
'2013-12-13',
'2013-01-14',
])
)
result = (
df
.groupby([df.index.year, df.index.month])['tp1']
.max()
.reset_index()
.groupby('level_1')['tp1']
.mean()
)
result.index = pandas.to_datetime(result.index, format='%m').strftime('%b')
print(result)
输出
level_1
Jan 0.00
Apr 0.10
Jul 0.20
Aug 0.10
Dec 0.45
Name: tp1, dtype: float64