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

如何基于Pandas DataFrame列的唯一值构建层级列

构建Pandas层级列解决方案

嘿,我来帮你搞定这个基于列唯一值创建层级列的需求!下面是具体的步骤和代码实现:

步骤1:准备原始数据

先把你给出的DataFrame定义好:

import pandas as pd

# 原始数据
df = pd.DataFrame({
    'S.No': [1, 2, 3],
    'Name1': ['ABC', 'BCA', 'DAB'],
    'Name2': ['XYZ', 'XCZ', 'ZXM'],
    'Size': [12, 15, 20]
})

步骤2:生成层级列索引(MultiIndex)

我们需要用Name1的所有唯一值作为上层列,Name2的所有唯一值作为下层列,借助from_product方法生成多级列索引:

# 获取Name1和Name2的唯一值集合
name1_unique = df['Name1'].unique()
name2_unique = df['Name2'].unique()

# 构建多级列索引
hierarchical_columns = pd.MultiIndex.from_product(
    [name1_unique, name2_unique],
    names=['Name1', 'Name2']  # 可选:给层级命名,让结构更清晰
)

步骤3:初始化新DataFrame并填充数据

创建一个空的DataFrame,以原数据的S.No为索引,接着遍历原始数据,把对应位置的Size值填充进去:

# 初始化带层级列的空DataFrame
new_df = pd.DataFrame(index=df['S.No'], columns=hierarchical_columns)

# 遍历原始数据填充对应值
for _, row in df.iterrows():
    new_df.loc[row['S.No'], (row['Name1'], row['Name2'])] = row['Size']

# 设置索引名称(可选,提升可读性)
new_df.index.name = 'S.No'

最终效果

运行完代码后,你会得到符合预期的层级列结构:

ABC        BCA        DAB
          XYZ XCZ ZXM XYZ XCZ ZXM XYZ XCZ ZXM
S.No
1         12  NaN NaN NaN NaN NaN NaN NaN NaN
2         NaN NaN NaN NaN 15  NaN NaN NaN NaN
3         NaN NaN NaN NaN NaN NaN NaN NaN 20

如果需要把空值NaN替换成默认值(比如0),可以在最后加一行new_df = new_df.fillna(0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:21:26