Python学习笔记:SQL中group_concat分组合并操作实现

一、背景

MySQL学习笔记:concat、concat_ws、group_concat —— 字符串连接

如何利用 Pandas 实现 SQL 中的 group_concat 操作?

二、实操

1.构造测试数据集

import pandas as pd
import numpy as np
df = pd.DataFrame({
        'name':['小明','小明','小明','小红','小三','小三'],
        'value':[10,20,20,20,200,500]})
df
'''
  name  value
0   小明     10
1   小明     20
2   小明     20
3   小红     20
4   小三    200
5   小三    500
'''

2.默认分组合并

  • groupby 实现分组
  • 匿名函数实现转换为列表
  • reset_index 实现索引重置
# NOT WORK
df.groupby("name").agg({"value":list})
# TypeError: 'type' object is not iterable

# 修改
df.groupby("name").agg({"value": lambda x: x.tolist()}).reset_index()
'''
  name         value
0   小三    [200, 500]
1   小明  [10, 20, 20]
2   小红          [20]
'''

3.指定符号

利用 join 函数实现字符串连接。

df.astype(str).groupby("name").apply(lambda x: ';'.join(x.value))
'''
name
小三     200;500
小明    10;20;20
小红          20
dtype: object
'''

# 还可以换行、转换成数据框
(df.astype(str)
.groupby("name")
.apply(lambda x: ';'.join(x.value))
.to_frame("value")
.reset_index()
)
'''
  name     value
0   小三   200;500
1   小明  10;20;20
2   小红        20
'''

4.去重显示

df.groupby("name").agg({'value':'unique'}).reset_index()
'''
  name       value
0   小三  [200, 500]
1   小明    [10, 20]
2   小红        [20]
'''

5.降序排列

(df.groupby("name")
.agg({"value": lambda x: x.tolist()})["value"]
.apply(lambda x: sorted(x, reverse=True))
.reset_index()
)

参考链接:对比SQL,学习Pandas操作:group_concat如何实现?

原文地址:https://www.cnblogs.com/hider/p/15554141.html