分组Pandas datafram中的If语句

2024-10-05 12:23:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含年份、儒略日、小时和温度列的数据集。我已经按年份和日期对数据进行了分组,现在想对温度数据执行操作,如果每天包含24小时的数据。然后,我想创建一个包含年份、儒略日、最高温度和最低温度的数据帧。但是,我不确定是否满足这个条件的语法。任何帮助都将不胜感激。我的代码如下:

df = pd.read_table(data,skiprows=1,sep='\t',usecols=(0,3,4,6),names=['year','jday','hour','temp'],na_values=-999.9)
g = df.groupby(['year','jday'])

if #the grouped year and day has 24 hours worth of data
    maxt = g.aggregate({'temp':np.max})
    mint = g.aggregate({'temp':np.min})
else:
    continue

以及一些样本数据(从1942年到2015年):

^{pr2}$

Tags: 数据dfdatanp语法温度条件year
2条回答

我会从一天一天的分组开始,然后迭代这些组,检查每个组中唯一的小时数。您可以使用^{}来查找每个测量日的唯一小时数,并与一整天的小时数进行比较{0,1,2,3,...23}

a_full_day = set(range(24))
#data_out  = {}
gb         = df.groupby(['jday']) # only group by day

for day, inds in gb.groups.iteritems():
    if set(df.ix[inds, 'hour']) == a_full_day:
        maxt = df.ix[inds, 'temp'].max()
        #data_out[day] = {}
        #data_out[day]['maxt'] = maxt
        # etc

我添加了一些注释行,建议如何存储输出

我假设不存在包含非整数小时的['year', 'julian']组,因此我们可以使用该组的长度作为条件。在

import pandas as pd

def get_min_max_by_date(df_group):
    if len(df_group['hour'].unique()) < 24:
        new_df = pd.DataFrame()
    else:
        year = df_group['year'].unique()[0]
        j_day = df_group['jday'].unique()[0]
        min_temp = df_group['temp'].min()
        max_temp = df_group['temp'].max()
        new_df = pd.DataFrame({'year': [year],
                               'julian_day': [j_day],
                               'min_temp': [min_temp],
                               'max_temp': [max_temp]}, index=[0])
    return new_df

df = pd.read_table(data,
                   skiprows=1,
                   sep='\t',
                   usecols=(0, 3, 4, 6),
                   names=['year', 'jday', 'hour', 'temp'],
                   na_values=-999.9)

final_df = df.groupby(['year', 'jday'],
                      as_index=False).apply(get_min_max_by_date)
final_df = final_df.reset_index()

我现在没有时间来测试这个,但这应该能让你开始。在

相关问题 更多 >

    热门问题