我在創建可以執行嵌套循環的遞歸函數時遇到問題。這是一個例子。假設我有一個數據框,如下所示:col1 col2 col3 col4A 1 Y 10A 1 Y 19A 1 N 20A 2 Y 21A 3 N 22C 3 N 23我想對 col1,col2,col3 進行分組,然后計算 col4 的總和。正常的代碼塊看起來像這樣。for code,val in df.groupby(by='col1'): for codee,vall in val.groupby(by='col2'): for codeee,valll in vall.groupby(by='col3): answer=sum(valll['col4'])但我想創建一個遞歸函數來完成這項任務。這是我到目前為止所得到的。real=[]def groupby_recurse(data, levels): layer = len(levels) if layer >= 1: for code, val in data.groupby(by=levels[-layer]): groupby_recurse(val, levels[(-layer + 1):]) else: real.append(sum(data['col4'])) return realdf = pd.DataFrame([['A', 1, 'Y', 10], ['A', 1, 'Y', 19], ['A', 1, 'N', 20], ['A', 2, 'Y', 21], ['A', 2, 'Y', 22], ['C', 3, 'N', 23]], columns=['col1', 'col2', 'col3', 'col4'])groupby_recurse(df, ['col1', 'col2', 'col3'])這個函數有一個嚴重的問題。當layer=2,-layer+1=-1時,我位于groupby鍵列表的最后一個元素,但是進入下一輪,當layer=1且-layer+1=0時,它突然跳到第一個groupby 鍵列表的元素,并且它會永遠持續下去。我該如何解決這個問題?任何幫助深表感謝。干杯。預期輸出是包含所有總和值的列表。第一個值是 29。因為對所有三列進行分組后,df 看起來像這樣col1 col2 col3 col4 A 1 Y 10 A 1 Y 19接下來是 20,因為分組后 df 看起來像這樣。col1 col2 col3 col4A 1 N 20然后就是21了。col1 col2 col3 col4A 2 Y 21....最終結果將是[29,20,21,22,23]。希望這是有道理的。
1 回答

九州編程
TA貢獻1785條經驗 獲得超4個贊
您不需要遞歸,只需執行以下操作:
df = df.groupby(['col1', 'col2', 'col3'])['col4'].sum().reset_index()
添加回答
舉報
0/150
提交
取消