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

如何基于girth值为Pandas Series指定索引名加前缀并转单列DataFrame?

解决方案

直接上可运行的代码,一步到位:

import pandas as pd

# 原始数据
df_single_level_cols = pd.DataFrame([[0, 1, 20], [2, 3, 40]], columns=['weight', 'height', 'girth'])

# 1. 提取每行的girth值(转成字符串方便拼接前缀)
girth_values = df_single_level_cols['girth'].astype(str)

# 2. 给weight和height列名匹配对应行的girth前缀
renamed_cols = {
    'weight': girth_values + 'weight',
    'height': girth_values + 'height'
}

# 3. 提取目标列、重命名、转成单列并整理格式
temp = df_single_level_cols[['weight', 'height']].rename(columns=renamed_cols).stack()
result = temp.to_frame(name='Data')
result.index = temp.index.get_level_values(1)

print(result)

运行后输出完全符合你的需求:

Data
20weight     0
20height     1
40weight     2
40height     3

分步说明

  • 提取前缀源:把girth列转成字符串类型,确保能和列名直接拼接。
  • 动态重命名列:利用Pandas的广播特性,让每行的weight/height列名自动匹配对应行的girth值作为前缀。
  • 转成单列结构:用stack()把多列折叠成一维Series,再提取带前缀的索引作为最终DataFrame的索引。

针对你之前尝试方法的补充

你之前用df[0].add_prefix("test")报错,是因为stack后的Series里,df[0]是取索引为0的元素而非子系列。如果非要基于stack后的结构处理,可以用分组的方式:

df = df_single_level_cols.stack()

# 按外层索引分组,每组内处理
processed = df.groupby(level=0).apply(
    lambda group: group.drop('girth').rename(lambda idx: f"{group['girth']}{idx}")
)

# 整理成目标DataFrame
result_df = processed.reset_index(level=0, drop=True).to_frame('Data')

两种方法都能实现需求,第一种不需要先stack再处理,效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:48:26