繁体   English   中英

Python pandas dataframe:为另一列的每个唯一值查找最大值

[英]Python pandas dataframe: find max for each unique values of an another column

我有一个大的 dataframe(从 500k 到 1M 行),其中包含例如这 3 个数字列:ID、A、B

我想过滤结果以获得如下图所示的表格,其中,对于列 id 的每个唯一值,我有 A 和 B 的最大值和最小值。我该怎么做?

编辑:为了更清楚,我更新了下图:当我从一列中获取最大值或最小值时,我还需要获取其他列的相关数据

在此处输入图像描述

示例数据(请注意,您发布的图像未经重新输入就无法被潜在的回答者使用,因此我在其位置制作了一个简单的示例):

df=pd.DataFrame({ 'id':[1,1,1,1,2,2,2,2],
                   'a':range(8), 'b':range(8,0,-1) })

关键是只使用idxmaxidxmin ,然后使用索引进行idxmax处理,以便您可以以可读的方式合并事物。 这是完整的答案,您可能希望检查中间数据框以了解其工作原理。

df_max = df.groupby('id').idxmax()
df_max['type'] = 'max'
df_min = df.groupby('id').idxmin()
df_min['type'] = 'min'

df2 = df_max.append(df_min).set_index('type',append=True).stack().rename('index')

df3 = pd.concat([ df2.reset_index().drop('id',axis=1).set_index('index'), 
                  df.loc[df2.values] ], axis=1 )

df3.set_index(['id','level_2','type']).sort_index()

                 a  b
id level_2 type      
1  a       max   3  5
           min   0  8
   b       max   0  8
           min   3  5
2  a       max   7  1
           min   4  4
   b       max   4  4
           min   7  1

请特别注意 df2 如下所示:

id  type   
1   max   a    3
          b    0
2   max   a    7
          b    4
1   min   a    0
          b    3
2   min   a    4
          b    7

那里的最后一列保存df中的索引值,这些值是通过idxmaxidxmin 所以基本上你需要的所有信息都在df2 其余的只是与df合并并使其更具可读性的问题。

对于希望获得具有唯一 ID 的特定列的最小值和最大值的任何人,这就是我修改上述代码的方式:

df_maxA = df.groupby('id').max()['A']
df_maxA['type'] = 'max'
df_minA = df.groupby('id').max()['A']
df_minA['type'] = 'min'

df_maxB = df.groupby('id').max()['B']
df_maxB['type'] = 'max'
df_minB = df.groupby('id').max()['B']
df_minB['type'] = 'min'

然后您可以将它们合并在一起以创建一个 dataframe。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM