一、背景
如何利用 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()
)