计算跨越多天的pandas数据帧中的每日最小和最大列数

时间:2017-07-19 17:22:20

标签: python pandas

我有这个人。包含每小时数据的数据框:

                            tmp            min_tmp          max_tmp
dates                                                             
2017-07-19 14:00:00         19.0             19.0             19.0
2017-07-19 15:00:00         18.0             18.0             18.0
2017-07-19 16:00:00         16.0             16.0             16.0
2017-07-19 17:00:00         16.0             16.0             16.0
2017-07-19 18:00:00         15.0             15.0             15.0

我们是否可以分别在tmpmin_tmp中计算max_tmp的每日最低和最高值。我试过这个

df['min_temp'] = df['tmp'].min()

但这对跨越多天的数据框数据不起作用

3 个答案:

答案 0 :(得分:3)

使用store()resample

transform

输出

g = df.resample('D')['tmp']

df['min_tmp'] = g.transform('min')

df['max_tmp'] = g.transform('max')

答案 1 :(得分:1)

这是按天计算的最小/最大值。您必须按天,月和年同时分组:

pd.groupby(df['tmp'], by=[df.index.day, df.index.month, df.index.year]).min()

答案 2 :(得分:0)

transform

中的

pandas

 df['Date']=df.index
 df.Date=pd.to_datetime(df.Date)
 map={'min_tmp':min, 'max_tmp':max}
    for key,value in map.items():
        print(key,value)
        df[key]=df.groupby(df.Date.dt.date)['tmp'].transform(func=value)

 df.drop(['Date'],axis=1)

Out[469]: 
                 tmp  min_tmp  max_tmp
Date                                  
7/19/2017 14:00   19       15       19
7/19/2017 15:00   18       15       19
7/19/2017 16:00   16       15       19
7/19/2017 17:00   16       15       19
7/19/2017 18:00   15       15       19

我懒得重复,但你可以简单地做到这一点。

df['max_tmp']=df.groupby(df.Date.dt.date)['tmp'].transform(max)
df['min_tmp']=df.groupby(df.Date.dt.date)['tmp'].transform(min)