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如何實現?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM