如何将带多重索引的pandas Series转换为DataFrame?
多级索引Series转指定格式DataFrame的解决方案
你需要将带有capability_name(一级索引)和collection_title(二级索引)的Series转换为以能力名称为行、时间为列的宽表,用unstack()方法就能轻松实现,步骤如下:
1. 转换索引为列
使用unstack()将二级索引collection_title转为DataFrame的列:
df = s.unstack(level='collection_title')
level参数可以指定要转换的索引层级,这里直接用索引名更清晰,也可以用位置level=1(因为collection_title是第二层索引)。
2. 调整列顺序
默认unstack()后的列顺序是按索引自然排序,你需要手动指定列的顺序来匹配目标格式:
df = df[['Jul 2022', 'Jan 2023']]
完整示例代码
import pandas as pd # 构造原始多级索引Series(模拟你的数据) data = [3.714286, 3.545455, 4.000000, 3.760000, 3.666667, 3.529412, 3.000000, 3.000000, 2.600000, 2.750000] index = pd.MultiIndex.from_tuples( [ ('Capability_01', 'Jan 2023'), ('Capability_01', 'Jul 2022'), ('Capability_02', 'Jan 2023'), ('Capability_02', 'Jul 2022'), ('Capability_03', 'Jan 2023'), ('Capability_03', 'Jul 2022'), ('Capability_04', 'Jan 2023'), ('Capability_04', 'Jul 2022'), ('Capability_05', 'Jan 2023'), ('Capability_05', 'Jul 2022'), ], names=['capability_name', 'collection_title'] ) s = pd.Series(data, index=index, name='capability_score') # 转换并调整列顺序 df = s.unstack(level='collection_title') df = df[['Jul 2022', 'Jan 2023']] print(df)
输出结果
Jul 2022 Jan 2023 capability_name Capability_01 3.545455 3.714286 Capability_02 3.760000 4.000000 Capability_03 3.529412 3.666667 Capability_04 3.000000 3.000000 Capability_05 2.750000 2.600000
内容的提问来源于stack exchange,提问作者PeDey
相关产品推荐
相关产品推荐

