<small id='Tg5hG'></small><noframes id='Tg5hG'>

    1. <i id='Tg5hG'><tr id='Tg5hG'><dt id='Tg5hG'><q id='Tg5hG'><span id='Tg5hG'><b id='Tg5hG'><form id='Tg5hG'><ins id='Tg5hG'></ins><ul id='Tg5hG'></ul><sub id='Tg5hG'></sub></form><legend id='Tg5hG'></legend><bdo id='Tg5hG'><pre id='Tg5hG'><center id='Tg5hG'></center></pre></bdo></b><th id='Tg5hG'></th></span></q></dt></tr></i><div id='Tg5hG'><tfoot id='Tg5hG'></tfoot><dl id='Tg5hG'><fieldset id='Tg5hG'></fieldset></dl></div>
    2. <tfoot id='Tg5hG'></tfoot>
    3. <legend id='Tg5hG'><style id='Tg5hG'><dir id='Tg5hG'><q id='Tg5hG'></q></dir></style></legend>
      • <bdo id='Tg5hG'></bdo><ul id='Tg5hG'></ul>
      1. 获取分组中具有最大值的行

        时间:2024-08-22
        <i id='ivZ73'><tr id='ivZ73'><dt id='ivZ73'><q id='ivZ73'><span id='ivZ73'><b id='ivZ73'><form id='ivZ73'><ins id='ivZ73'></ins><ul id='ivZ73'></ul><sub id='ivZ73'></sub></form><legend id='ivZ73'></legend><bdo id='ivZ73'><pre id='ivZ73'><center id='ivZ73'></center></pre></bdo></b><th id='ivZ73'></th></span></q></dt></tr></i><div id='ivZ73'><tfoot id='ivZ73'></tfoot><dl id='ivZ73'><fieldset id='ivZ73'></fieldset></dl></div>
        <tfoot id='ivZ73'></tfoot>
          <tbody id='ivZ73'></tbody>
              <legend id='ivZ73'><style id='ivZ73'><dir id='ivZ73'><q id='ivZ73'></q></dir></style></legend>
                <bdo id='ivZ73'></bdo><ul id='ivZ73'></ul>

                  <small id='ivZ73'></small><noframes id='ivZ73'>

                • 本文介绍了获取分组中具有最大值的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我有一个根据id列分组的数据帧。对于每个组,我希望获得包含最大值的行(整行,而不仅仅是值)。我可以这样做:首先获取每个组的最大值,然后创建一个过滤数组,然后在原始数据帧上应用过滤。就像这样

                  import pandas as pd
                  
                  # Dummy data
                  df = pd.DataFrame({'id' : [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4],
                                     'other_value' : ['a', 'e', 'b', 'b', 'a', 'd', 'b', 'f' ,'a' ,'c', 'e', 'f'],
                                     'value' : [1, 3, 5, 2, 5, 6, 2, 4, 6, 1, 7, 3]
                                     })
                  
                  # Get the max value in each group
                  df_max = df.groupby('id')['value'].max()
                  
                  # Create row filter
                  row_filter = [df_max[i]==v for i, v in zip(df['id'], df['value'])]
                  
                  # Filter
                  df_target = df[row_filter]
                  df_target
                  Out[58]: 
                      id other_value  value
                  2    1           b      5
                  5    2           d      6
                  7    3           f      4
                  10   4           e      7
                  

                  此解决方案有效,但不知何故似乎过于繁琐。有没有人知道更好的方法来做这件事。最好是眼线笔。关于可能的重复项,我将在稍后处理:)

                  推荐答案

                  如果需要,请使用DataFrameGroupBy.idxmax仅选择一个最大值:

                  df = df.loc[df.groupby('id')['value'].idxmax()]
                  print (df)
                      id other_value  value
                  2    1           b      5
                  5    2           d      6
                  7    3           f      4
                  10   4           e      7
                  

                  如果有多个最大值并希望按max值搜索所有行:

                  df = pd.DataFrame({'id' : [1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 4, 4],
                                     'other_value' : ['a', 'e', 'b', 'b', 'a', 'd', 'b', 'f' ,'a' ,'c', 'e', 'f'],
                                     'value' : [1, 3, 5, 2, 5, 6, 2, 4, 6, 1, 7, 7]
                                     })
                  

                  print (df)
                      id other_value  value
                  0    1           a      1
                  1    1           e      3
                  2    1           b      5
                  3    2           b      2
                  4    2           a      5
                  5    2           d      6
                  6    3           b      2
                  7    3           f      4
                  8    4           a      6
                  9    4           c      1
                  10   4           e      7
                  11   4           f      7
                  
                  df = df[df.groupby('id')['value'].transform('max') == df['value']]
                  print (df)
                      id other_value  value
                  2    1           b      5
                  5    2           d      6
                  7    3           f      4
                  10   4           e      7
                  11   4           f      7
                  

                  这篇关于获取分组中具有最大值的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用agg&amp;联接对一列进行分组,但仅按唯一值进行分组(&A) 下一篇:如何使用Python/Pandas从日期字段按月分组

                  相关文章

                    <bdo id='iv4I8'></bdo><ul id='iv4I8'></ul>

                  <small id='iv4I8'></small><noframes id='iv4I8'>

                    <legend id='iv4I8'><style id='iv4I8'><dir id='iv4I8'><q id='iv4I8'></q></dir></style></legend>

                  1. <i id='iv4I8'><tr id='iv4I8'><dt id='iv4I8'><q id='iv4I8'><span id='iv4I8'><b id='iv4I8'><form id='iv4I8'><ins id='iv4I8'></ins><ul id='iv4I8'></ul><sub id='iv4I8'></sub></form><legend id='iv4I8'></legend><bdo id='iv4I8'><pre id='iv4I8'><center id='iv4I8'></center></pre></bdo></b><th id='iv4I8'></th></span></q></dt></tr></i><div id='iv4I8'><tfoot id='iv4I8'></tfoot><dl id='iv4I8'><fieldset id='iv4I8'></fieldset></dl></div>

                  2. <tfoot id='iv4I8'></tfoot>