大熊猫用时间序列索引重塑数据框

时间:2021-03-05 21:04:50

标签: python pandas

这个脚本的目的是读取一个如下所示的 csv 文件:

Unnamed: 0         Release Date                               Event actual
0           0  2021-02-26 13:30:00                   Canada RMPI (MoM)   5.7%
1           1  2021-01-03 06:30:00  Canada Investing.com USD/CAD Index  37.8%
2           2  2021-01-03 13:30:00              Canada Current Account  -7.3B

问题是我想要这样:

Release Date      Canada RMPI (MoM)   Canada Investing.com USD/CAD Index  Canada Current Account
2021-02-26 13:30:00          5.7%                            
2021-01-03 06:30:00                                    37.8%
2021-01-03 13:30:00                                                           -7.3B

当某些事件确实同时发生时存储在同一行

所以我尝试了这个代码:

import pandas as pd
df = pd.read_csv('df.csv')
df = pd.melt(df, id_vars=["Release Date"], var_name='event', value_name='actual')
print(df)

但这就是我得到的:

              Release Date       event                              actual
0  2021-02-26 13:30:00  Unnamed: 0                                   0
1  2021-01-03 06:30:00  Unnamed: 0                                   1
2  2021-01-03 13:30:00  Unnamed: 0                                   2
3  2021-02-26 13:30:00       Event                   Canada RMPI (MoM)
4  2021-01-03 06:30:00       Event  Canada Investing.com USD/CAD Index
5  2021-01-03 13:30:00       Event              Canada Current Account
6  2021-02-26 13:30:00      actual                                5.7%
7  2021-01-03 06:30:00      actual                               37.8%
8  2021-01-03 13:30:00      actual                               -7.3B

完全没有错误。

3 个答案:

答案 0 :(得分:0)

如果您想使用列作为 DataFrame 的索引,请尝试 df.set_index('column_name')。之后运行您的 .melt 代码应该会产生您想要的结果。

在此处查看示例:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.set_index.html

答案 1 :(得分:0)

答案如下:

import pandas as pd

df = pd.read_csv('df.csv')
df = df.pivot(index="Release Date", columns="Event", values="actual")
print(df)

答案 2 :(得分:0)

可以堆叠和卸载;

df.set_index(['Release Date','Event']).stack().unstack('Event').fillna('')