【问题标题】:Multiple Condition Daily Counts by Month/Year in Pandas DFPandas DF 中按月/年计算的多个条件每日计数
【发布时间】:2021-09-21 21:11:50
【问题描述】:

我在数据框 (df) 中有每小时数据,我需要计算满足多个数据列条件的天数,然后在 df 中按月和年对这些计数求和,以描述存在所有 3 个数据条件的每日“事件” .我的数据如下所示:

   site        wind           time                 temp          rh        year   month day
0  Cirrus         4.3        2011-01-01 20:00:00        5.9       54.6         2011    1     1 
1  Cirrus         3.9        2011-01-01 19:00:00        4.2       28.5         2011    1     1
2  Cirrus         6.8        2011-01-01 18:00:00        3.3       19.5         2011    1     1
3  Stratus        4.9        2011-01-01 23:00:00        2.9       27.3         2011    1     1
4  Stratus        2.9        2011-01-01 22:00:00        1.8       17.1         2011    1     1
5  Stratus        2.1        2011-01-01 21:00:00        0.2       53.2         2011    1     1
6  Stratus        0.9        2014-02-01 23:00:00        3.8       19.9         2014    2     1

我的标准需要针对 3 个条件:风 (=1.0 和

我的结果应该是这样的:

    Site       year  month   condition_count
0   Cirrus     2011  1       1
1   Stratus    2011  1       2
2   Stratus    2014  2       1

我已经研究过使用 lambda 函数按行过滤每个列阈值,类似这样,但我不确定这是获得答案的好方向。

isWind = lambda x:int(x <= 5)
isAir = lambda x:int(x >= 1 & <=5)
isRH = lambda x:int(x <=30)
countlimits = lambda row: isWind(row['wind_speed_ms']) + isAir(row['air_temp_c']) + 
isRH(row['relative_humidity_pct'])

df['Event_Days'] = df.apply(countlimits,axis=1)

我也尝试过类似的方法,但它给出了将 rand 数组与标量混合的错误:

df_final = df[(df.wind_speed_ms < 5) & (df.loc[(df['air_temp_c'] >= 1) 
& (df['air_temp_c'] < 5)]) & (df.relative_humidity_pct <= 30)].sum()

提前感谢您的帮助。

【问题讨论】:

  • df[(df['wind']>=5)&(df['temp']>=1)&(df['temp']

标签: pandas events conditional-statements multiple-columns multiple-conditions


【解决方案1】:
df_final = df[(df['wind_speed_ms']<=5) & (df['air_temp_c']>=1) & (df['air_temp_c']<=5) & (df['relative_humidity_pct']<=30)].groupby(['Site','year','month']).day.nunique().reset_index()

df_final.columns = ['Site','year','month','event_days']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2021-07-31
    • 2019-09-07
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多