使用 pandas dataframe 将时间序列中每个日期的行转置为列

问题描述 投票:0回答:1

我有一系列去年每个到期日和期限的掉期时间序列数据 - 我希望使用 pandas 数据框(然后可以用于构建)将其转置为每天的简单网格(使用日期作为索引)虚线网格)

自下:

每天都这样:

鉴于顶行中重复的 1m、3m、6m 等,我不知道如何转置它,同时将日期保留为关键索引:

python pandas dataframe indexing transpose
1个回答
0
投票

解决方案有两个步骤:(1)将列宽数据转换为长表,(2)将长表转换为索引宽

创建示例并保存为 CSV 格式:

import pandas as pd
from io import StringIO

# Create example 
csv_data = """year,A,A,A,B,B,B,C,C,C
,x,y,z,x,y,z,x,y,z
2003,0,1,2,3,4,5,6,7,8
2004,10,11,12,13,14,15,16,17,18
2005,20,21,22,23,24,25,26,27,28
2006,30,31,32,33,34,35,36,37,38
2007,40,41,42,43,44,45,46,47,25
2008,50,51,52,53,54,55,56,57,58
2009,60,61,62,63,64,65,66,67,68
2010,70,71,72,73,74,75,76,77,78
"""

# Save example data in CSV:
df = pd.read_csv(StringIO(csv_data), header=[0, 1])
df.to_csv('data_example.csv', index=False)

使用多级列从 CSV 读取文件

df = pd.read_csv('data_example.csv', header=[0,1], skipinitialspace=False)
df

修复列的

multilevel

index_tuples = df.columns.tolist()
index_tuples[0] = ('year', '')
df.columns = pd.MultiIndex.from_tuples(index_tuples)
df

步骤01:转换为长格式数据帧

df2 = df.melt(id_vars='year')
df2

步骤02:转换为多级索引数据框

# Change columns name:    
df2.columns = ['year', 'headerlvl1', 'headerlvl2', 'value']

# Using pivot_table:
df2.pivot_table(values='value', index=['year', 'headerlvl2'], columns='headerlvl1')

希望这是您正在寻找的

© www.soinside.com 2019 - 2024. All rights reserved.