首页 > 解决方案 > 气候学频率和持续时间

问题描述

我有一个 10 年的气候数据集如下。

dt               T          P
01-01-2010        3          0
02-01-2010        5          11
03-01-2010       10          50
....
31-12-2020       -1          0

我想估计每个月 T 和 P 连续大于 0 三天或更长时间的总天数

我希望这些列作为输出:

month    Number of days/DurationT&P>0     T   P  

我从未在 python 中使用过循环,当数据必须首先按月和年分组然后应用条件时,我似乎能够编写一个简单的循环,除此之外什么都没有。非常感谢有关循环构造的任何提示。

A= dataset
A['dt'] = pd.to_datetime(A['dt'], format='%Y-%m-%d')

for column in A [['P', 'T']]:
    for i in range (len('P')):
        if i > 0:
           P.value_counts()
             print(i)
    for j in range (len ('T')):
       if i > 0:
       T.value_counts()
           print(j)

标签: pythonpandasloopsconditional-statements

解决方案


这是一种非常幼稚的方法,您可以通过简单地遍历行来设置它:

df['valid'] = (df['T'] > 0) & (df['P'] > 0)

def count_total_days(df):
    i = 0
    total = 0
    for idx, row in df.iterrows():
        if row.valid:
            i += 1
        elif not row.valid:
            if i >= 3:
                total += i
            i = 0
    
    return total

由于您每月都需要它,因此您首先必须创建新的月份和年份列来分组:

df['month'] = df['dt'].dt.month
df['year'] = df['dt'].dt.year

for date, df_subset in df.groupby(['month', 'year']):
    count_total_days(df_subset)

推荐阅读