gpt4 book ai didi

python - 在 Python 中使用 Pandas 重复年度循环

转载 作者:太空宇宙 更新时间:2023-11-03 19:42:44 27 4
gpt4 key购买 nike

我正在尝试操纵 pa​​ndas 中数据的年度周期。我创建了降雨数据的年度周期(包括闰日),其中索引是代表月份和日期的字符串。

我想使用日期时间索引在一段时间内(例如 1980-2020 年)重复这些数据。有没有一种巧妙的方法可以在 pandas 中做到这一点?我能想到的唯一方法是创建一个空数据框并循环多年,检查闰年,但我确信一定有更好的方法。

到目前为止我已经得到:

import pandas as pd
import numpy as np
import calendar

data = np.random.rand(366)
df_annual_cycle = pd.DataFrame(
columns=['annual_cycle'],
index=pd.date_range('2004-01-01','2004-12-31').strftime('%m-%d'),
data=data
)

df_annual_cycle.head()

# annual_cycle
# 01-01 0.863838
# 01-02 0.234168
# 01-03 0.368678
# 01-04 0.066332
# 01-05 0.493080


df_every_year=pd.DataFrame(
columns=['rainfall'],index=pd.date_range('1980-01-01','2020-12-31')
)

for year in df_every_year.index.year:
if calendar.isleap(year):
df_every_year[
df_every_year.index.year==year
] = df_annual_cycle.values
elif ~calendar.isleap(year):
df_every_year[
df_every_year.index.year==year
] = df_annual_cycle.drop(index='02-29').values

理想情况下,我希望不必使用 .values 转换为 numpy 数组,因为我的数据框有多个(可能是可变的)列。

最佳答案

对于其他尝试这样做的人来说,这要快得多(尽管仍然不是很简洁):

import pandas as pd
import numpy as np
import calendar

data = np.random.rand(366)
df_annual_cycle = pd.DataFrame(
columns=['annual_cycle'],
index=pd.date_range('2004-01-01','2004-12-31').strftime('%m-%d'),
data=data
)


years=np.arange(1980,2020)
df_every_year=pd.concat([df_annual_cycle]*40)
myindex=(np.repeat(years,366).astype(str)+df_every_year.index)
df_every_year.index=myindex
for year in np.arange(1980,2020):
if ~calendar.isleap(year):
df_every_year.drop(index=str(year)+'02-29',inplace=True)
df_every_year.index=pd.to_datetime(df_every_year.index,format='%Y%m-%d')

关于python - 在 Python 中使用 Pandas 重复年度循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60337779/

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