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

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

      • <bdo id='QMWZE'></bdo><ul id='QMWZE'></ul>

    2. pandas GROUPBY+变换和多列

      时间:2024-08-22

        <tbody id='x47sJ'></tbody>
        • <legend id='x47sJ'><style id='x47sJ'><dir id='x47sJ'><q id='x47sJ'></q></dir></style></legend>
            <bdo id='x47sJ'></bdo><ul id='x47sJ'></ul>
              <tfoot id='x47sJ'></tfoot>

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

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

                本文介绍了 pandas GROUPBY+变换和多列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                若要获得对与原始DataFrame(相同观测计数)相同详细级别的Groupby数据执行的结果,我使用了Transform函数。

                示例: 原始数据帧

                name, year, grade
                Jack, 2010, 6
                Jack, 2011, 7
                Rosie, 2010, 7
                Rosie, 2011, 8
                

                GROUPBY转换后

                name, year, grade, average grade
                Jack, 2010, 6, 6.5
                Jack, 2011, 7, 6.5
                Rosie, 2010, 7, 7.5
                Rosie, 2011, 8, 7.5
                
                但是,随着基于多列的更高级函数的出现,事情变得更加复杂。令我困惑的是,我似乎无法访问分组转换组合中的多个列。

                df = pd.DataFrame({'a':[1,2,3,4,5,6],
                               'b':[1,2,3,4,5,6],
                               'c':['q', 'q', 'q', 'q', 'w', 'w'],  
                               'd':['z','z','z','o','o','o']})
                
                def f(x):
                 y=sum(x['a'])+sum(x['b'])
                 return(y)
                
                df['e'] = df.groupby(['c','d']).transform(f)
                

                给我:

                KeyError: ('a', 'occurred at index a')
                

                虽然我知道以下方法确实有效:

                df.groupby(['c','d']).apply(f)
                

                导致此行为的原因以及如何获得以下内容:

                a   b   c   d   e
                1   1   q   z   12
                2   2   q   z   12
                3   3   q   z   12
                4   4   q   o   8
                5   5   w   o   22
                6   6   w   o   22
                

                推荐答案

                对于此特定情况,您可以执行以下操作:

                g = df.groupby(['c', 'd'])
                
                df['e'] = g.a.transform('sum') + g.b.transform('sum')
                
                df
                # outputs
                
                   a  b  c  d   e
                0  1  1  q  z  12
                1  2  2  q  z  12
                2  3  3  q  z  12
                3  4  4  q  o   8
                4  5  5  w  o  22
                5  6  6  w  o  22
                

                如果您可以通过同一Groupby上的独立转换的线性组合来构造最终结果,则此方法将起作用。

                否则,您将使用groupby-apply,然后合并回原始DF。

                示例:

                _ = df.groupby(['c','d']).apply(lambda x: sum(x.a+x.b)).rename('e').reset_index()
                df.merge(_, on=['c','d'])
                # same output as above.
                

                这篇关于 pandas GROUPBY+变换和多列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:如何按多列分组以在Pandas DataFrame中列出 下一篇:将组平均值分配给Python/PANAS中的每一行

                相关文章

                  <tfoot id='en1By'></tfoot>
                1. <i id='en1By'><tr id='en1By'><dt id='en1By'><q id='en1By'><span id='en1By'><b id='en1By'><form id='en1By'><ins id='en1By'></ins><ul id='en1By'></ul><sub id='en1By'></sub></form><legend id='en1By'></legend><bdo id='en1By'><pre id='en1By'><center id='en1By'></center></pre></bdo></b><th id='en1By'></th></span></q></dt></tr></i><div id='en1By'><tfoot id='en1By'></tfoot><dl id='en1By'><fieldset id='en1By'></fieldset></dl></div>
                2. <legend id='en1By'><style id='en1By'><dir id='en1By'><q id='en1By'></q></dir></style></legend>
                  1. <small id='en1By'></small><noframes id='en1By'>

                    • <bdo id='en1By'></bdo><ul id='en1By'></ul>