【问题标题】:Dynamic number of lamda and apply statements in PandasPandas 中 lambda 和 apply 语句的动态数量
【发布时间】:2023-02-13 20:54:24
【问题描述】:

我正在尝试创建一个嵌套的 JSON 块并遇到了这个很棒的解决方案Pandas grouping by multiple columns to get a multi nested Json

test = [df.groupby('cat_a')\
          .apply(lambda x: x.groupby('cat_b')\
                            .apply(lambda x: [x.groupby('cat_c')
                                               .apply(lambda x: x[['participants_actual','participants_registered']].to_dict('r')
                                                      ).to_dict()]
                                  ).to_dict()
          ).to_dict()]

import json
json_res = list(map(json.dumps, test))

这对我的用例很有效。但是,由于我无法在所有情况下控制数据框,因此可能不止此处提到的三个级别。

我可以很容易地想象得到如下水平:

for c in cols[:-2]:
   .... perform level gropuping

但是,由于每个 lamba 和 apply 函数都进入了上面的级别,我不确定如何在 for 循环中编写这样的语句。

有没有办法让这个声明更有活力?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你试过让它递归吗? 不完全如下所示,因为您需要在分组后删除相关的列,但是沿着这些方向

    def myfunc(df):
       if len(df.columns.values) > 1 :
          # the line below needs correction, need to drop the column
          # return [df.groupby[col].apply(myfunc)].to_dict()
       else :
          return [df].to_dict()
    

    【讨论】:

      猜你喜欢
      • 2018-07-30
      • 1970-01-01
      • 2017-10-04
      • 2017-11-27
      • 1970-01-01
      • 2023-04-03
      • 2019-11-23
      • 2022-01-11
      • 2020-02-20
      相关资源
      最近更新 更多