pandas 透視表中文字段排序

2021-08-21 05:26:32 字數 2345 閱讀 4640

前幾天有乙個需求,透視表中的年級這一列要按照一年級,二年級這樣的序列進行排序,但是用過透視表的人都知道,透視表對中文的排序不是太理想,放棄pandas自帶的排序方法。測試了很久,想到乙個辦法。先把dataframe中需要特殊排序的列中的漢字轉換成數字,然後生成透視表,生成透視表之後,再把透視表的index或者columns中的數字替換成相應的漢字,透視表的結果就會按照你想要的順序進行排序。

def get_special_sort_data(self, groupby, columns):

# 獲取需要特殊處理的字段的資訊

special_sort_cols = none

cols_in_index_or_column = none # 判斷特殊排序欄位在index還是column中

if self.datasource.has_special_sort_cols:

# 獲取表需要處理的特殊字段資訊

special_sort_cols = self.datasource.get_sort_columns() # }

if special_sort_cols:

i_intersection = list(set(groupby) & set(special_sort_cols.keys()))

c_intersection = list(set(columns) & set(special_sort_cols.keys()))

if i_intersection:

cols_in_index_or_column = ('index', i_intersection)

elif c_intersection:

cols_in_index_or_column = ('column', c_intersection)

return cols_in_index_or_column, special_sort_cols

cols_in_index_or_column, special_sort_cols = self.get_special_sort_data(groupby, columns) # special_sort_cols:}

if cols_in_index_or_column:

for col in cols_in_index_or_column[1]:

df[col] = df[col].replace(special_sort_cols.get(col)) # 替換df

# 獲取透視表

if cols_in_index_or_column:

if cols_in_index_or_column[0] == 'index':

iflen(groupby) == 1:

col_name = cols_in_index_or_column[1][0]

sort_info = special_sort_cols.get(col_name)

r_sort_info =

index_1 = df.index.tolist()

index_1 = [r_sort_info.get(item) for

item

in index_1]

df.index = index(index_1, name=df.index.name)

else:

foritem

in cols_in_index_or_column[1]:

ix = df.index.names.index(item)

index_1 = df.index.levels[ix].tolist()

sort_info = special_sort_cols.get(item)

r_sort_info =

index_1 = [r_sort_info.get(item) for

item

in index_1]

df.index = df.index.set_levels(index_1, level=ix)

else:

foritem

in cols_in_index_or_column[1]:

ix = df.columns.names.index(item)

col_1 = df.columns.levels[ix].tolist()

sort_info = special_sort_cols.get(item)

r_sort_info =

col_1 = [r_sort_info.get(item) for

item

in col_1]

df.columns = df.columns.set_levels(col_1, level=ix)

pandas 透視表中文字段排序方法

前幾天有乙個需求,透視表中的年級這一列要按照一年級,二年級這樣的序列進行排序,但是用過透視表的人都知道,透視表對中文的排序不是太理想,放棄pandas自帶的排序方法。測試了很久,想到乙個辦法。先把dataframe中需要特殊排序的列中的漢字轉換成數字,然後生成透視表,生成透視表之後,再把透視表的in...

mysql中文字段排序

mysql中文排序失效解決方法convert name using gbk 當mysql使用的預設utf8編碼時,如果直接order by 中文字段排序,排序結果會不正確。將字段先轉換成gbk編碼再排序 convert 欄位名 using gbk convert 提供乙個在不同字符集之間轉換資料的方...

PL SQL Developer 中文字段顯示亂碼

在資料表中插入一條資料,可以正常出入,但是當查詢顯示的時候,中文字元無法顯示出來,而是顯示的問號 如執行以下 create table student sid number 10 sname varchar2 20 constraint student sid un unique sid inser...