提问者:小点点

如何将熊猫的每日数据帧转换为每月最大值的平均值?


我有一个数据框显示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()

然而,我认为这是在绘制最大值的最大值,而不是我想要的最大值的平均值。


共3个答案

匿名用户

您可以首先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