gpt4 book ai didi

python - 按两列对行进行分组并通过比较过滤值

转载 作者:太空宇宙 更新时间:2023-11-03 14:40:05 24 4
gpt4 key购买 nike

我正在尝试:

  • 创建一个新的数据框(df2)
  • 这个新数据框将包含来自 df1 的行
  • 为了将这些行添加到 df2,我按月份和元素对 df1 中的列进行了分组
  • 我只会选择超过 df 中每月同行的值(例如,如果 df1 中的第 1 个月有 10 个值超过 df 中第 1 个月的值,我会将这 10 个值包含在新数据框中)

我现在没有做的是将按月分组的每一行的值与 df 中的每月等效值(其中包含每月的最大值)进行比较

  • 我只想从 df1 中选择值超过 df 中每月同行的行

我从一个 stackoverflow 用户那里得到了一个解决方案,它允许我获得每个月的最大值。问题是在某些情况下,df1 中有超过 2 个值超过 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 个月的值

最佳答案

使用map对于与 df2 大小相同的 Series,因此可能比较,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

关于python - 按两列对行进行分组并通过比较过滤值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54141287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com