我正在尝试:
我现在无法做的是将按月分组的每一行的值与df中的每月等效值(包含每月的最大值)进行比较
我从stackoverflow用户那里得到了一个解决方案,该解决方案使我可以获得每个月的最大值。问题是在某些情况下,df1中有两个以上的值超过了df中的当月值。
这是我到目前为止的代码:
df4 = df3[df3['Element'] =='TMAX'].groupby("Month").max()
df3_max = df4[df4.Data_Value > df_max.Data_Value]
df5 = df3[df3['Element'] =='TMIN'].groupby("Month").min()
df4_min = df5[(df5.Data_Value) < (df_min.Data_Value)]
这是df:
Data_Value
Month
1.0 217.0
2.0 194.0
3.0 317.0
4.0 306.0
5.0 367.0
6.0 406.0
7.0 406.0
8.0 372.0
9.0 372.0
10.0 328.0
11.0 256.0
12.0 194.0
df1(样本完整数据具有> 1000行):
ID Date Element Data_Value Month
0 USW00094889 2014-11-12 TMAX 220.0 11.0
1 USC00208972 2009-04-29 TMAX 560.0 1.0
2 USC00200032 2008-05-26 TMAX 278.0 5.0
3 USC00205563 2005-11-11 TMAX 239.0 11.0
4 USC00200230 2014-02-27 TMAX -106.0 2.0
5 USW00014833 2010-10-01 TMAX 194.0 10.0
6 USC00207308 2010-06-29 TMIN 144.0 6.0
7 USC00203712 2005-10-04 TMAX 289.0 10.0
8 USW00004848 2007-12-14 TMIN -16.0 12.0
9 USC00200220 2011-04-21 TMAX 72.0 4.0
10 USC00205822 2013-01-16 TMAX 411.0 1.0
11 USC00205822 2008-05-29 TMIN 28.0 5.0
12 USC00203712 2008-10-17 TMIN 17.0 10.0
13 USC00205563 2006-05-14 TMAX 183.0 5.0
这是我的预期输出(df2):
Data_Value
Month
1.0 560.0
1.0 411.0
因此,从df1数据帧开始,仅第2行和第11行会被添加到df2,因为这些行的值超过了df中第1个月的值
答案 0 :(得分:4)
将map
用于Series
,其大小与df2
相同,因此可以比较,仅在df.index
中使用必要的月份的唯一值:
df3 = df1[df1['Data_Value'] > df1['Month'].map(df['Data_Value'])]
print (df3)
vID Date Element Data_Value Month
1 USC00208972 2009-04-29 TMAX 560.0 1.0
10 USC00205822 2013-01-16 TMAX 411.0 1.0