根据 cumsum 值对行求和

Summing rows based on cumsum values

我有一个数据框

指数 A B C
0 4 7 9
1 2 6 2
2 6 9 1
3 7 2 4
4 8 5 6

我想根据 C 列的总和创建另一个数据框。但这里的问题是,如果 C 的总和达到 10 或更高,它应该创建另一行。像这样。

指数 A B C
0 6 13 11
1 21 16 11

任何帮助都将不胜感激。有没有一种可靠的方法可以做到这一点,或者迭代是我最后的选择?

代码看起来像这样:

import pandas as pd

lista = [4, 7, 10, 11, 7]
listb= [7, 8, 2, 5, 9]
listc = [9, 2, 1, 4, 6]

df = pd.DataFrame({'A': lista, 'B': listb, 'C': listc})

def sumsc(df):
    suma=0
    sumb=0
    sumc=0
    list_of_sums = []
    for i in range(len(df)):
        suma+=df.iloc[i,0]
        sumb+=df.iloc[i,1]
        sumc+=df.iloc[i,2]
        if sumc > 10:
            list_of_sums.append([suma, sumb, sumc])
            suma=0
            sumb=0
            sumc=0
    return pd.DataFrame(list_of_sums)

sumsc(df)

    0   1   2
0  11  15  11
1  28  16  11

有一种非迭代方法。您需要基于 C % 11.

groupby
# Groupby logic - 
out = df.groupby((df.C.cumsum() % 10).diff().shift().lt(0).cumsum(), as_index=0).agg('sum')
print(out) 
    A   B   C
0   6  13  11
1  21  16  11