这个脚本的目的是读取一个如下所示的 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
完全没有错误。
答案 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('')