zoukankan      html  css  js  c++  java
  • 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如何实现?

  • 相关阅读:
    第八周学习进度
    《梦断代码》阅读笔记01
    冲刺记录一
    NABCD简介
    第七周学习进度
    《编程珠玑》阅读笔记03
    第六周学习进度
    数据库数据定期同步实现
    数据库之间的数据同步
    数据同步——otter
  • 原文地址:https://www.cnblogs.com/hider/p/15554141.html
Copyright © 2011-2022 走看看