如何防止 pd.pivot_table 对列进行不必要的排序

问题描述 投票:0回答:1

我有以下长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
似乎是按字母顺序对列进行排序,而我希望它按时间顺序排序

如有任何帮助,我们将不胜感激,

(注意日期是不断变化的,所以其他月份也会有类似的问题)

python pandas pivot-table
1个回答
2
投票

您无法阻止排序,但您始终可以通过将

.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
并对其进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.