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