簡體   English   中英

熊貓:使用交叉表時更改列的順序

[英]Pandas: change the order of the columns when using crosstab

很簡單,我想更改 Panda 的crosstab列的順序。

現在,它是按字母順序排列的,即:周五、周一、周六、周日、周四、周二、周三。 我希望它按順序進行,即:星期一,星期二,...,星期日。

這是一個數據集,我想為一周中的幾天和發生的時間制作一個crosstab

我現在正在這樣做:

pd.crosstab(data_2019.HOUR, data_2019.DAY_OF_WEEK)

輸出如下所示:

DAY_OF_WEEK Friday  Monday  Saturday    Sunday  Thursday    Tuesday Wednesday
HOUR                            
0   204 255 256 260 225 222 192
1   121 111 198 230 116 117 145
2   128 90  217 222 84  111 96

您可以按照所需的順序創建一個包含星期幾的列表。 然后您可以使用.crosstab並使用更改運行.crosstab的輸出順序

生成crosstab

days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
        'Friday', 'Saturday', 'Sunday']

c = pd.crosstab(...)

一種選擇

更改crosstab表生成的列的順序

  • 這相當於簡單地選擇所有列,但是按照您需要的順序使用工作日名稱列表,因為crosstab輸出只是一個普通的 Pandas DataFrame
c = c[days]

或者

使用.reindexaxis='columns'並指定列表( days )用於更改DataFrame的索引(列)

c = c.reindex(days, axis="columns")

通常需要更改列和行的順序,為此我們需要結合@edesz 提供的答案中概述的方法。

例如:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame({"a": ["one", "two", "three", "three"], "b": ["two", "one", "three", "one"]})

In [3]: pd.crosstab(df["a"], df["b"]) # wrong order
Out[3]:
b      one  three  two
a
one      0      0    1
three    1      1    0
two      1      0    0

In [4]: pd.crosstab(df["a"], df["b"]).reindex(["one", "two", "three"])[["one", "two", "three"]] # correct order
Out[4]:
b      one  two  three
a
one      0    1      0
two      1    0      0
three    1    0      1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM