为了账号安全,请及时绑定邮箱和手机立即绑定

如何将嵌套数据帧 groupby 循环合并到 Python 的递归函数中?

如何将嵌套数据帧 groupby 循环合并到 Python 的递归函数中?

千万里不及你 2023-06-27 13:41:08
我在创建可以执行嵌套循环的递归函数时遇到问题。这是一个例子。假设我有一个数据框,如下所示: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()


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信