如何基于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
相关产品推荐
相关产品推荐

