You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过GroupBy与多聚合将指定Pandas DataFrame转为目标嵌套列表?

问题:将DataFrame转换为指定嵌套列表格式

现有通过pd.read_sql_query获取的DataFrame,结构及示例数据如下:

tabla       nombre_razon                          periodos
Bancos  |   ALIAGA ORTIZ LILIA ROXANA       |   [201801,201902]
Bancos  |   CIELO PLAST EIRL                |   [201702]
Bancos  |   COCHACHIN AGUIRRE ELIAS PABLO   |   [201801,201902,202001]
Bancos  |   COPLASTICA SAC                  |   [202203, 202102, 202110, 202105, 202206]
Bancos  |   ECOPET PERU SAC                 |   [201801,201902]
Ventas  |   ALIAGA ORTIZ LILIA ROXANA       |   [202201, 202202, 202109, 202107]
Ventas  |   GRUPO ELIAPAC SAC               |   [202207, 202209, 202205, 202203, 202109]
Ventas  |   COPLASTICA SAC                  |   [201801,201902]
Ventas  |   ECOPET PERU SAC                 |   [201801,201902]
Ventas  |   KENTHIVAS SAC                   |   [202208, 202201, 202112, 202202]
Compras |   ALIAGA ORTIZ LILIA ROXANA       |   [201801,201902]
Compras |   CIELO PLAST EIRL                |   [202204, 202201, 202202, 202209]
Compras |   COCHACHIN AGUIRRE ELIAS PABLO   |   [201801,201902]
Compras |   ECOPET PERU SAC                 |   [202201, 202107, 202108, 202109]
Compras |   KENTHIVAS SAC                   |   [201801,201902]

需要将其转换为如下嵌套列表格式:

[
    ['Bancos','Ventas','Compras'],
    [
        ['ALIAGA ORTIZ LILIA ROXANA','CIELO PLAST EIRL','COCHACHIN AGUIRRE ELIAS PABLO','COPLASTICA SAC','ECOPET PERU SAC'],
        ['ALIAGA ORTIZ LILIA ROXANA','GRUPO ELIAPAC SAC','COPLASTICA SAC','ECOPET PERU SAC','KENTHIVAS SAC'],
        ['ALIAGA ORTIZ LILIA ROXANA','CIELO PLAST EIRL','COCHACHIN AGUIRRE ELIAS PABLO','ECOPET PERU SAC','KENTHIVAS SAC']
    ],
    [
        [['201801','201902'],['201702'],['201801','201902','202001'],['202203','202102','202110','202105', '202206'],['201801','201902']],
        [['202201','202202','202109','202107'],['202207','202209','202205','202203','202109'],['201801','201902'],['201801','201902'],['202208','202201','202112','202202']],
        [['201801','201902'],['202204','202201', '202202','202209'],['201801','201902'],['202201','202107','202108','202109'],['201801','201902']]
    ]
]

用户尝试过以下两种方法但未成功:
方法一:

dataFrame.groupby(['tabla', 'nombre_razon','periodos'])

方法二:

comboGeneral2['periodo_tributario']=comboGeneral2['periodo_tributario'].apply(str)
    
comboGeneral1=comboGeneral3.groupby('tabla')['nombre_razon','periodo_tributario'].agg(lambda x: list(x)).reset_index()

解决方案

可以通过分组后分别提取三个层级的数据,再组合成目标嵌套结构,具体代码如下:

import pandas as pd

# 假设你的DataFrame名为df
# 按tabla分组,保留原数据中的顺序
grouped = df.groupby('tabla', sort=False)

# 提取第一层:所有tabla名称
level1 = list(grouped.groups.keys())

# 提取第二层:每个tabla对应的nombre_razon列表
level2 = [group['nombre_razon'].tolist() for _, group in grouped]

# 提取第三层:每个tabla对应的periodos嵌套列表
level3 = [group['periodos'].tolist() for _, group in grouped]

# 组合成目标格式的嵌套列表
result = [level1, level2, level3]

print(result)

代码说明:

  1. 分组控制顺序:使用sort=False保证分组后的tabla顺序和原DataFrame中出现的顺序一致,避免结果顺序混乱。
  2. 层级数据提取:
    • level1直接获取分组后的所有tabla名称;
    • level2遍历每个分组,将分组内的nombre_razon列转为列表;
    • level3遍历每个分组,将分组内的periodos列转为列表(原periodos已是列表类型,tolist会保留其嵌套结构)。
  3. 组合结果:将三个层级的数据放入一个大列表,即可得到目标格式的嵌套列表。

内容的提问来源于stack exchange,提问作者Raknaros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:25:17