我有一些以表“ weather_data”形式存在的温度数据,其中包含以下字段:
Month Day Element Data_Value
4 12 TMAX 53
4 08 TMAX 62
4 12 TMAX 78
4 12 TMIN -32
4 12 TMIN -12
我希望对元素[Month,Day,Element]执行groupby之后的最大值和最小值:
Month Day Element Data_Value
4 12 TMAX 78
TMIN -32
4 08 TMAX 62
我运行了代码
weather_data.groupby(['Month','Day','Element'])['Data_Value']
但是只有在获得每个TMAX和TMIN的第一个值的情况下才得到输出(而不是每月获取每月的最大TMAX和最小TMIN):
Month Day Element Data_Value
4 12 TMAX 53
TMIN -32
4 08 TMAX 62
请告诉我需要添加哪些其他命令才能获得所需的输出。 谢谢!
答案 0 :(得分:1)
尝试一下:
max = df.loc[df['Element'] == 'TMAX'].groupby(['Month','Day','Element'])['Data_Value'].max()
min = df.loc[df['Element'] == 'TMIN'].groupby(['Month','Day','Element'])['Data_Value'].min()
pd.concat([max, min]).reset_index()
out:
Month Day Element Data_Value
0 4 8 TMAX 62
1 4 12 TMAX 78
2 4 12 TMIN -32
答案 1 :(得分:0)
检查
df['Func']=df.Element.map({'TMAX':'max','TMIN':'min'})
pd.concat([y.groupby(['Month','Day','Element'])['Data_Value'].agg(x) for x , y in df.groupby('Func')])
Month Day Element
4 8 TMAX 62
12 TMAX 78
TMIN -32
Name: Data_Value, dtype: int64