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

      <tfoot id='Fxz3c'></tfoot>

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

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

        pandas GROUP BY AND SUM,但在超过一定数量时创建新行

        时间:2024-08-22
          <bdo id='riA1z'></bdo><ul id='riA1z'></ul>

        • <small id='riA1z'></small><noframes id='riA1z'>

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

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

                    <tbody id='riA1z'></tbody>

                  本文介绍了 pandas GROUP BY AND SUM,但在超过一定数量时创建新行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我当前有一个数据集,其中我尝试根据列对行进行分组,并对值为整数的列求和。

                  但是,问题是,一旦总和达到特定阈值,我想创建一个新行

                  例如,在下面的数据框中,我尝试根据公司名称对行进行分组并合计权重,但是我不希望权重超过100。

                  输入数据帧:

                  公司 权重
                  a 30
                  b 45
                  a 27
                  a 40
                  b 57
                  a 57
                  b 32

                  输出数据帧:

                  公司 权重
                  a 97
                  a 57
                  b 89
                  b 45

                  我已尝试使用GROUP BY和SUM,但是它无法检测我是否已达到最大值。

                  我有什么方法可以实现这一点吗?

                  如有任何帮助,我们将不胜感激!

                  推荐答案

                  我认为这里有必要的循环,因此为了提高性能,使用numba、修改solution from Divakar、按组调用函数GroupBy.transform,然后聚合sum

                  from numba import njit
                  
                  @njit
                  def make_groups(x, target):
                      result = np.empty(len(x),dtype=np.uint64)
                      total = 0
                      group = 0
                      for i,x_i in enumerate(x):
                          total += x_i
                          if total >= target:
                              group += 1
                              total = 0
                          result[i] = group
                      return result
                  
                  g = df.groupby("Company")["Weight"].transform(lambda x: make_groups(x.to_numpy(), 100))
                  
                  df1 = (df.groupby(by=["Company", g])
                          .sum()
                          .reset_index(1, drop=True)
                          .sort_values(['Company','Weight'], ascending=[True, False])
                          .reset_index())
                  print (df1)
                    Company  Weight
                  0       a      97
                  1       a      57
                  2       b      89
                  3       b      45
                  

                  这篇关于 pandas GROUP BY AND SUM,但在超过一定数量时创建新行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:使用Pandas GroupBy和VALUE_COUNTS查找最常用的值 下一篇:pandas 分组并使用最小值更新

                  相关文章

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

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

                      <bdo id='DG1oL'></bdo><ul id='DG1oL'></ul>
                  1. <tfoot id='DG1oL'></tfoot>

                    1. <legend id='DG1oL'><style id='DG1oL'><dir id='DG1oL'><q id='DG1oL'></q></dir></style></legend>