如何解决如何在Python的递归函数中合并嵌套数据框groupby循环?
我在创建可以执行嵌套循环的递归函数时遇到了麻烦。这是一个例子。 假设我有一个如下数据框:
col1 col2 col3 col4
A 1 Y 10
A 1 Y 19
A 1 N 20
A 2 Y 21
A 3 N 22
C 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 real
df = pd.DataFrame([['A',1,'Y',10],['A',19],'N',20],2,21],22],['C',3,23]],columns=['col1','col2','col3','col4'])
groupby_recurse(df,['col1','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 col4
A 1 N 20
然后是21。
col1 col2 col3 col4
A 2 Y 21
... 最终结果将是[29,20,21,22,23]。希望这是有道理的。
解决方法
您不需要递归,只需执行以下操作即可:
df = df.groupby(['col1','col2','col3'])['col4'].sum().reset_index()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。