如何将多列DataFrame转换为以行列名组合为索引的Series
解决方法:用pandas的
stack()实现DataFrame转指定格式Series 没问题,这事儿用pandas的stack()方法就能轻松搞定,正好匹配你想要的效果——把原DataFrame的行索引和列名组合成新Series的索引,对应的数据也会自动对齐。
步骤说明
- 先确认你的DataFrame结构(就像你提供的那样);
- 使用
stack()方法将列标签转换为Series的内层索引,原行索引作为外层,形成多层索引(MultiIndex)的Series; - 可选:如果需要将多层索引合并为单一字符串索引(比如用空格连接列名和行名),可以额外处理。
代码示例
首先根据你提供的数据构造DataFrame,然后执行转换:
import pandas as pd # 构造你给出的DataFrame data = { 'Trades Before': [31540.0, 39.151712, 130.948917, -1611.0, 29.0, 74.0, 99.0, 184.0], 'Trades After': [1000.0, 42.216, 143.153156, -1371.0, 34.0, 79.0, 109.0, 179.0], 'Predicted': [1000.0, 90.144811, 1.345089, 88.234987, 89.052902, 89.9792, 91.127657, 93.915568], 'Change': [-0.968294, 0.078267, 0.093198, -0.148976, 0.172414, 0.067568, 0.10101, -0.027174] } df = pd.DataFrame(data, index=['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max']) # 核心转换:生成带多层索引的Series result_series = df.stack() # 查看你提到的预期示例对应的结果 print(result_series.loc['50%', 'Trades After']) # 输出:79.0
如果想要把多层索引合并成单一的字符串索引(比如格式为"列名 行名"),可以添加这一步:
# 将多层索引拼接为单一字符串索引 result_series_single = result_series.rename(lambda idx: f"{idx[1]} {idx[0]}") # 此时查看预期示例的结果 print(result_series_single['Trades After 50%']) # 输出:79.0
效果说明
stack()方法会自动将原DataFrame的每一列“堆叠”到行索引下方,形成(行名, 列名)的多层索引结构,每个索引对应原DataFrame中单元格的值;- 如果你需要的是单一字符串索引,用
rename()把元组索引拼接成你想要的格式即可,完全灵活可控。
内容的提问来源于stack exchange,提问作者nicholas.reichel
相关产品推荐
相关产品推荐

