Groupby 分组后,如何合并列里的内容?

Python大咖谈

共 1170字,需浏览 3分钟

 ·

2021-04-24 23:38

Pandas 百问百答第 012 篇。

前两天回答了一个群友的问题,感觉有点意思,记录如下:

问题:

  • 有如下图这样的一个 df,想按公司部门分组

  • 分组后,想把部门人数运营成本两列的内容合并成一列

    197cea5f6050910d35224e5ce1ae5257.webp原始 df
  • 就是把同一个公司、同一个部门的内容合并到一个数据单元中

    e466c7676ce879a185718002a5d733cc.webp输出的 df

类似这样的需求以前也有人提过,今天就与大家分享一下解决方案:

  1. 要实现列的内容合并,需要先把部门人数和运营成本两列的类型从数字改为文本,如果要合并的列类型本身就是文本,则无需转换

    db0ea1e7c06acf42904cc6da03fa2890.webp


    上图中可以看到部门人数和运营成本两列的类型为 object,即字符串类型

  2. 创建临时列,把要合并的列先合并了,分组后,直接操作这个临时列就可以了

  3. 新增一列部门人数:运营成本,该列的目的是按公司部门把每组内部的临时合并一列中的内容组合在一起,这里用的是 transform,不改变原始 df 的行数,只是在原有 df 上增加分组合并的内容

  4. 因为上一步用的是 transform,因此处理过的 df 存在重复值,需要去重

    e7844f6e401974992e6241ee2e909894.webp


    上图显示了如何添加合并列,如何分组并合并每组中的内容,可以看到输出的 df 与原始 df 的行数一样都是 6 行,这就是 transform 的特性,虽然分组 groupby,但不是减少行数

  5. 选择需要输出的列,如公司部门部门人数:运营成本,然后去重,就可以得到想要的结果了

    14d98f718ac0f2843e0bad6d952d7329.webp
  6. 补充说明,群友当时还想输出为 JSON 格式,pandas 提供了 to_json 方法,可以将 dataframe 输出为 JSON 格式,本篇重点不是这个,就先不介绍了,有兴趣的朋友,可以去官网搜索 to_json,自己看下。

下载 完整 ipynb 文件,请继续往下看。。。

a0cea1477a22fa32388672bdea70319f.webpa0cea1477a22fa32388672bdea70319f.webp


要查看源码,请在 python大咖谈后台输入分组合并,下载完整的 ipynb 文件

浏览 61
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报