Python pandas dataframe:为另一列的每个唯一值找到max

时间:2016-11-12 22:34:21

标签: python pandas dataframe grouping

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

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

编辑:我已更新下面的图片以便更清楚:当我从列获得最大值或最小值时,我还需要获取与其他列相关的数据

enter image description here

1 个答案:

答案 0 :(得分:3)

示例数据(请注意,您发布的图片在没有重新输入的情况下无法被潜在的回答者使用,所以我在其中制作了一个简单的示例):

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

关键是使用idxmaxidxmin然后使用索引进行预测,以便您可以以可读的方式合并内容。以下是整个答案,您可能希望检查中间数据帧,看看它是如何工作的。

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中使用idxmax&来源的索引值。 idxmin。所以基本上你需要的所有信息都在df2。其余部分只是与df合并并使其更具可读性。

相关问题