python - Pandas group by 和 sum,但在超过一定数量时创建一个新行

标签 python pandas pandas-groupby

我目前有一个数据集,我试图根据列对行进行分组,并对值为整数的列求和。
但是,问题是我想在总和达到某个阈值后创建一个新行
例如,在下面的数据框中,我试图根据公司名称对行进行分组并对权重求和,但是,我不希望权重超过 100。
输入数据框:


公司
重量


一种
30


45

一种
27

一种
40


57

一种
57


32


输出数据帧:


公司
重量


一种
97

一种
57


89


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

关于python - Pandas group by 和 sum,但在超过一定数量时创建一个新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67815908/

相关文章:

python - 检测数据帧是否具有 MultiIndex

python - 基于 pandas 中的 groupby() 从多列计算

Pandas 对子字符串或正则表达式进行分组

python - 结合字符串递归-python

python - 使用数据透视表仅返回索引列,忽略数据透视表

python - 如何根据multiIndex DataFrame的内部索引进行操作?

python - 如何将 Pandas 中的数据帧相加超过 5 个

Python 使用正则表达式提取字符串的出现

python - 如何导入win32api

python - 拆分 pandas 数据框的所有列表列