【发布时间】:2020-08-16 07:26:12
【问题描述】:
another question 的标题非常相似,但那里的答案似乎不适用于我的问题。
我有以下数据框:
date hour rating category value
date_time
2020-02-01 00:00:00 2020-02-01 1 30.0 C1 41.5
2020-02-01 01:00:00 2020-02-01 2 32.4 C1 54.1
2020-02-01 02:00:00 2020-02-01 3 31.1 C1 40.9
2020-02-01 00:00:00 2020-02-01 1 NaN C2 51.5
2020-02-01 01:00:00 2020-02-01 2 NaN C2 50.6
2020-02-01 02:00:00 2020-02-01 3 NaN C2 42.3
2020-02-02 00:00:00 2020-02-02 1 36.8 C1 47.8
2020-02-02 01:00:00 2020-02-02 2 30.1 C1 50.1
2020-02-02 02:00:00 2020-02-02 3 30.5 C1 44.0
2020-02-02 00:00:00 2020-02-02 1 NaN C2 46.8
2020-02-02 01:00:00 2020-02-02 2 NaN C2 44.2
2020-02-02 02:00:00 2020-02-02 3 NaN C2 45.2
我想转换成这个:
date hour rating C1 C2
date_time
2020-02-01 00:00:00 2020-02-01 1 30.0 41.5 51.5
2020-02-01 01:00:00 2020-02-01 2 32.4 54.1 50.6
2020-02-01 02:00:00 2020-02-01 3 31.1 40.9 42.3
2020-02-02 00:00:00 2020-02-02 1 36.8 47.8 46.8
2020-02-02 01:00:00 2020-02-02 2 30.1 50.1 44.2
2020-02-02 02:00:00 2020-02-02 3 30.5 44.0 45.2
所以基本上将某个category 的value 显示在不同的列中,而不是每一行显示其category。
根据我上面链接的问题,我想出了这个:
pivoted_df = df.pivot_table(values="value", index=[df.index, "hour", "date", "rating"], columns="category")
但该操作的结果是:
category C1
date_time hour date rating
2020-02-01 00:00:00 1 2020-02-01 30.0 41.5
2020-02-01 01:00:00 2 2020-02-01 32.4 54.1
2020-02-01 02:00:00 3 2020-02-01 31.1 40.9
2020-02-02 00:00:00 1 2020-02-02 36.8 47.8
2020-02-02 01:00:00 2 2020-02-02 30.1 50.1
2020-02-02 02:00:00 3 2020-02-02 30.5 44.0
这真的不是我想要的。不仅如此,我还会添加hour、date 和rating 作为索引,这看起来不太正确,因为我希望将它们作为“普通”列。
我怎样才能实现我上面提到的?提前谢谢!
【问题讨论】:
标签: python-3.x pandas dataframe