我有以下长df:
df = pd.DataFrame({'stations':["Toronto","Toronto","Toronto","New York","New York","New York"],'forecast_date':["Jul 30","Jul 31","Aug 1","Jul 30","Jul 31","Aug 1"],'low':[58,57,59,70,72,71],'high':[65,66,64,88,87,86]})
print(df)
我想将表格旋转到宽 df,如下所示:所需输出
所以我使用了以下函数:
df = df.pivot_table(index = 'stations', columns = "forecast_date", values = ["high","low"],aggfunc = "first").reset_index()
print(df)
但是这样,我得到以下 df: 收到输出(不需要)
所以基本上
pd.pivot_table
似乎是按字母顺序对列进行排序,而我希望它按时间顺序排序
如有任何帮助,我们将不胜感激,
(注意日期是不断变化的,所以其他月份也会有类似的问题)
您无法阻止排序,但您始终可以通过将
.reindex
与列中的唯一值一起使用来强制执行原始排序!
table = df.pivot_table(index = 'stations', columns = "forecast_date", values = ["high","low"],aggfunc = "first")
print(
table
)
high low
forecast_date Aug 1 Jul 30 Jul 31 Aug 1 Jul 30 Jul 31
stations
New York 86 88 87 71 70 72
Toronto 64 65 66 59 58 57
print(
table.reindex(columns=df['forecast_date'].unique(), level='forecast_date')
)
high low
forecast_date Jul 30 Jul 31 Aug 1 Jul 30 Jul 31 Aug 1
stations
New York 88 87 86 70 72 71
Toronto 65 66 64 58 57 59
请注意,这与按时间顺序排序不同。为此,您必须转换为
datetime
并对其进行排序。