【发布时间】:2021-09-24 17:40:55
【问题描述】:
假设我创建了以下 Pandas 系列,其中包含 10 年来在三个不同站点的一些日常测量
import numpy as np
import pandas as pd
stations = ['a', 'b', 'c']
dates = pd.date_range(start = '2000-01-01', end = '2009-12-31')
index = [(stations[i], dates[j]) for i in range(len(stations)) for j in range(len(dates))]
index = pd.MultiIndex.from_tuples(index, names=["station", "date"])
x = np.random.random(len(index))
df = pd.Series(index = index, data = x)
产生一个看起来像这样的系列:
>>> df
station date
a 2000-01-01 0.736381
2000-01-02 0.203178
2000-01-03 0.640063
2000-01-04 0.942664
2000-01-05 0.953994
...
c 2009-12-27 0.713189
2009-12-28 0.800085
2009-12-29 0.033923
2009-12-30 0.972547
2009-12-31 0.387804
Length: 10959, dtype: float64
现在,对于每个站点,我想计算每年的平均天数,其测量值大于给定日期的每日平均值。
我知道我可以像这样计算每个站点的每日平均值:
daily_mean = df.groupby(['station',index.get_level_values('date').dayofyear]).mean()
>>> daily_mean
station date
a 1 0.529211
2 0.432048
3 0.438350
4 0.629226
5 0.523919
...
c 362 0.524537
363 0.346734
364 0.423349
365 0.433348
366 0.316085
Length: 1098, dtype: float64
但是在这一步之后,我不知道该怎么做。 基本上我想做这样的事情:
df['a','2000-01-01'] > daily_mean['a', 1]
df['a','2000-01-02'] > daily_mean['a', 2]
...
df['a','2000-12-31'] > daily_mean['a', 365]
...然后计算那一年有多少天高于平均水平,并为每一年做这个,然后取所有年份高于平均水平的平均天数。然后对每个站点执行此操作。
我可能可以通过一些痛苦的循环来做我想做的事,但我认为可能有更 Pandas 的方式来做到这一点?
【问题讨论】: