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

如何基于Pandas DataFrame唯一列组合拆分MB列?

Pandas按唯一组合拆分MB列的解决方案

问题描述

给定如下结构的Pandas DataFrame:

TAG TAG_NAME    METRIC    METRIC_NAME CAPTURE_DATE      MB
DB  PRO     SPACE           A       2024-03-01      3
DB  PRO     SPACE       B       2024-03-01      4
DB  PRO     SPACE       C       2024-03-01      5
DB  PRO     SPACE           D       2024-03-01      6
DB  PRO     SPACE       E       2024-03-01      7
DB  PRO     SPACE           A       2024-03-01      8
DB  PRO     SPACE       B       2024-03-01      9   
DB  PRO     SPACE       C       2024-03-01      10
DB  PRO     SPACE           D       2024-03-01      11
DB  PRO     SPACE       E       2024-03-01      12

需要基于(TAG, TAG_NAME, METRIC, CAPTURE_DATE)的唯一组合拆分MB列,得到如下输出:

TAG TAG_NAME    METRIC    METRIC_NAME CAPTURE_DATE      MB_First    MB_Second
DB  PRO     SPACE           A       2024-03-01      3       8
DB  PRO     SPACE       B       2024-03-01      4       9
DB  PRO     SPACE       C       2024-03-01      5       10
DB  PRO     SPACE           D       2024-03-01      6       11
DB  PRO     SPACE       E       2024-03-01      7       12

解决方案

可以通过分组生成序号 + 透视表转换的方式实现,步骤如下:

1. 构造示例数据(如果已有数据可跳过)

import pandas as pd

data = {
    'TAG': ['DB']*10,
    'TAG_NAME': ['PRO']*10,
    'METRIC': ['SPACE']*10,
    'METRIC_NAME': ['A', 'B', 'C', 'D', 'E', 'A', 'B', 'C', 'D', 'E'],
    'CAPTURE_DATE': ['2024-03-01']*10,
    'MB': [3,4,5,6,7,8,9,10,11,12]
}
df = pd.DataFrame(data)

2. 为分组内的行添加序号

对指定的唯一组合列分组,用cumcount()生成从0开始的序号,用来区分同一组合下的不同MB值:

df['seq'] = df.groupby(['TAG', 'TAG_NAME', 'METRIC', 'CAPTURE_DATE']).cumcount()

3. 透视表拆分MB列

使用pivot()将序号转为列名,MB值对应填充,同时保留其他非聚合列:

result = df.pivot(
    index=['TAG', 'TAG_NAME', 'METRIC', 'METRIC_NAME', 'CAPTURE_DATE'],
    columns='seq',
    values='MB'
).reset_index()

4. 重命名列并整理格式

将数字列名改为目标命名,确保输出格式符合要求:

result.columns = ['TAG', 'TAG_NAME', 'METRIC', 'METRIC_NAME', 'CAPTURE_DATE', 'MB_First', 'MB_Second']
print(result)

简化版代码

如果不需要分步调试,可将过程合并为一行:

result = (df.assign(seq=df.groupby(['TAG', 'TAG_NAME', 'METRIC', 'CAPTURE_DATE']).cumcount())
            .pivot(index=['TAG', 'TAG_NAME', 'METRIC', 'METRIC_NAME', 'CAPTURE_DATE'],
                   columns='seq', values='MB')
            .reset_index()
            .rename(columns={0:'MB_First', 1:'MB_Second'}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:07:29