我有这个人。包含每小时数据的数据框:
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
我们是否可以分别在tmp
和min_tmp
中计算max_tmp
的每日最低和最高值。我试过这个
df['min_temp'] = df['tmp'].min()
但这对跨越多天的数据框数据不起作用
答案 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)