pandas - Pandas:使用 DatetimeIndex 将时间序列列转换为多索引
问题描述
我有一个时间序列的 csv 文件/数据框,如下所示:
IDX_A IDX_B 1/1/20 1/2/20 1/3/20
A 1 A1_0 A1_1 A1_2
A 2 A2_0 A2_1 A2_2
B 3 B3_0 B3_1 B3_2
B 4 B4_0 B3_1 B3_2
我想转换为第一级为 DatetimeIndex 的多索引:
F1
Date IDX_A IDX_B
1/1/20 A 1 A1_0
2 A2_0
B 3 B3_0
4 B4_0
1/2/20 A 1 A1_1
2 A2_1
B 3 B3_1
4 B3_1
1/3/20 A 1 A1_2
2 A2_2
B 3 B3_2
4 B3_2
我认为以前有人问过这个问题,但我只能找到有关单个索引的另一个方向的信息。我将附加额外的特征列并在现有代码中使用,所以这对我来说是最好的格式,特别是考虑到 DatetimeIndex 对于时间序列有意义。
解决方案
我的做法:
(df.set_index(['IDX_A','IDX_B'])
.rename_axis(columns='Date')
.stack()
.reorder_levels((2,0,1))
.sort_index()
.to_frame(name='F1')
)
或使用melt
:
(df.melt(['IDX_A','IDX_B'], var_name='Date',value_name='F1')
.set_index(['Date','IDX_A','IDX_B'])
)
输出:
F1
Date IDX_A IDX_B
1/1/20 A 1 A1_0
2 A2_0
B 3 B3_0
4 B4_0
1/2/20 A 1 A1_1
2 A2_1
B 3 B3_1
4 B3_1
1/3/20 A 1 A1_2
2 A2_2
B 3 B3_2
4 B3_2
推荐阅读
- python - 软件包 libcxxabi 已安装但在 conda 中找不到
- sublimetext3 - 如何在 sublime 文本中更改 flake8 的缩进设置?
- apache-spark - 什么是 Spark 中的“序列化重定位”?
- java - 是否可以在 Java 的父类中为子类赋值?
- python - 根据先前 tkinter 条目小部件中给出的值添加条目小部件
- javascript - 更新嵌套对象
- android - Android Recyclerview 中的多种视图类型仅显示一个视图
- arrays - Perl 数组包含自身?
- python - 如何在屏幕中央对齐来自网络摄像头的 OpenCV 输出
- c - Windows 上的 pdcurses - printw() 不打印长字符串 (C) - ncurses 在 linux 上工作正常 - 可能的错误或我的实现错误?