gpt4 book ai didi

python - 从 pandas 数据框创建气候学(按年份附加平均值)

转载 作者:行者123 更新时间:2023-12-01 04:42:07 24 4
gpt4 key购买 nike

import pandas as pd
import pdb, random

dates = pd.date_range('1950-01-01', '1953-12-31', freq='D')
data = [int(1000*random.random()) for i in xrange(len(dates))]
cum_data = pd.Series(data, index=dates)

cum_data.head()
1950-01-01 310
1950-01-02 477
1950-01-03 401
1950-01-04 896
1950-01-05 65
...
1951-01-01 320
...
1952-01-01 330
...
1953-01-01 340

# Compute climatology
cum_data.groupby([cum_data.index.month, cum_data.index.day]).mean()

我想计算此数据框的气候学,即找到 1 月 1 日(1950 年至 1953 年)对应的所有值的平均值,然后将 1954 年 1 月 1 日起的时间段的平均值附加到数据框到 1960 年 12 月 31 日。我该怎么做?

预期输出应该是1950年到1953年的原始数据集。1954年1月1日应该是1950年、1951年、1952年、1953年1月1日的平均值。在这种情况下:

    1954-01-01    325
...
1955-01-01 325
...
...
1960-01-01 325

所以,1954 年 1 月 1 日将等于 1955 年 1 月 1 日...1960 年 1 月 1 日。这也适用于所有其他日期。

最佳答案

您可以在一年内使用resample函数AS

In [8]: cum_data.resample('AS', how='mean')
Out[8]:
1950-01-01 502.169863
1951-01-01 503.698630
1952-01-01 503.185792
1953-01-01 504.961644
Freq: AS-JAN, dtype: float64

将此结果存储到tmp

In [9]: tmp = cum_data.resample('AS', how='mean')

将索引更改为所需的时间范围

In [10]: tmp.index = (pd.date_range('1954-01-01', '1957-01-01', freq='AS'))

In [11]: tmp
Out[11]:
1954-01-01 502.169863
1955-01-01 503.698630
1956-01-01 503.185792
1957-01-01 504.961644
Freq: AS-JAN, dtype: float64

也填写每日日期。

In [12]: tmp = tmp.reindex(pd.date_range('1954-01-01', '1957-12-31', freq='D')).ffill()

In [13]: tmp.head()
Out[13]:
1954-01-01 502.169863
1954-01-02 502.169863
1954-01-03 502.169863
1954-01-04 502.169863
1954-01-05 502.169863
Freq: D, dtype: float64

然后附加到cum_data

In [14]: cum_data.append(tmp)
Out[14]:
1950-01-01 430
1950-01-02 125
1950-01-03 371
1950-01-04 906
1950-01-05 504
...
1957-12-28 504.961644
1957-12-29 504.961644
1957-12-30 504.961644
1957-12-31 504.961644
Length: 2922

关于python - 从 pandas 数据框创建气候学(按年份附加平均值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30387651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com