溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析

發(fā)布時間:2020-10-03 06:34:09 來源:腳本之家 閱讀:264 作者:秋天中的一片葉 欄目:開發(fā)技術(shù)

CategoricalDtype自定義排序

當(dāng)我們的透視表生成完畢后,有很多情況下需要我們對某列或某行值進(jìn)行排序。排序有很多種方法。例如sort_index及sort_values函數(shù)也可以對數(shù)據(jù)進(jìn)行排序,這里就不多說了。

對于數(shù)值和字母的排序很容易,但是對于中文的排序就有點麻煩了。默認(rèn)情況下是按照utf-8的編碼來進(jìn)行排序的但是即使如此也很難滿足我們對漢字排序的要求。所以通過CategoricalDtye可以把數(shù)據(jù)類型轉(zhuǎn)成Category類型

然后通過指定參數(shù)列表的順序來自定義那個元素先那個元素后,完全取決于你把那個元素放在List的前面,這樣就大大方便了我們對中文排序的操作。

代碼如下:

1. 自動生成DataFrame數(shù)據(jù)

#%%

import pandas as pd
from datetime import datetime

city =["上海","北京","深圳","杭州","蘇州","青島","大連","齊齊哈爾","大理","麗江",
     "天津","濟南","南京","廣州","無錫","連云港","張家界"]

#創(chuàng)建自動從list中選取valuse值的get_list函數(shù)
#replace=True代表允許選出的元素重復(fù)
def get_list(items,size=20):
  return pd.Series(items).sample(n=size,replace=True).to_list()

#通過get_list自動生成數(shù)據(jù),最終生成一個DataFrame
df = pd.DataFrame({
   "城市":get_list(city),
   "倉位":get_list(["經(jīng)濟艙","商務(wù)艙","頭等艙"]),
   "航線":get_list(["單程","往返"]),
   "日期": get_list([datetime(2020,8,1),datetime(2020,8,2),
           datetime(2020,8,3),datetime(2020,8,4)]),
   "時間": get_list(["09:00 - 12:00",
            "13:00 - 15:30",
            "06:30 - 15:00",
            "18:00 - 21:00",
            "20:00 - 23:20",
            "10:00 - 15:00"]),
   "航空公司": get_list(["東方航空","南方航空","深圳航空","山東航空","中國航空"]),
   "出票數(shù)量":get_list([10,15,20,25,30,35,40,45,50,55,60]),
  })
#%%
df

結(jié)果如下:

Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析

2. 查看數(shù)據(jù)類型

#%%

df.dtypes

Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析

3. 自定義數(shù)據(jù)類型(Category)按照指定順序排序,并通過透視表展示數(shù)據(jù)

#%%
#自定義type,以及自定義排序的順序
my_type = pd.CategoricalDtype(
  categories=["頭等艙","商務(wù)艙","經(jīng)濟艙"],
  ordered=True
)
df["倉位"] = df["倉位"].astype(my_type) #將指定列轉(zhuǎn)成自定義的type
df.dtypes
#%%
#通過透視表統(tǒng)計數(shù)據(jù)
tb = pd.pivot_table(
  df,
  index=["城市","倉位","航線","日期","時間"],
  values="出票數(shù)量",
  aggfunc=sum
)
tb

先查看數(shù)據(jù)類型:可以看出倉位的數(shù)據(jù)類型已經(jīng)從Object變成了category類型了。

Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析

結(jié)果為:

Python CategoricalDtype自定義排序?qū)崿F(xiàn)原理解析

分析上述數(shù)據(jù)可以看出,我們把倉位按照["頭等艙","商務(wù)艙","經(jīng)濟艙"]的順序進(jìn)行了排序,排序結(jié)果也是按照這個順序排列的,成功的滿足了我們對中文列自定義排序的需求。

通過Pivot_table函數(shù)更加清晰的對原有數(shù)據(jù)進(jìn)行了展示。也可以按照自己的需求展示其中的一部分?jǐn)?shù)據(jù)。這樣對數(shù)據(jù)的清洗及展示變得更加的靈活。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI