前言
之前我講過Excel怎么自定義排序,之前的思路是下面這樣的。
① 讀入數據,定義好排序的列表。
② 定義空的DataFrame,通過循環(huán)過濾數據。
③ 最后將數據進行合并。
import pandas as pd
data = pd.read_excel('測試.xlsx',sheetname='data')
sort_list = ['采石場','工礦用地','能源設施','旅游設施','交通設施','養(yǎng)殖場','農業(yè)用地','居民點','其他人工設施']
new_data = pd.DataFrame({'一級類型':[],
'面積':[]})
for i in sort_list:
new_data = pd.concat([new_data,data[data['一級類型'] == i]])
new_data
最近又遇到了這個問題,但是用之前的思路就會麻煩點,不是很智能,主要是出現了兩個問題。
問題一:無法行和列都自定義排序,這次遇到的表行和列都很多,都需要排序,這種方法沒法解決。
問題二:給定的列順序名稱與表格不一致,給定的順序要多一些。
解決思路
這次我們用到pandas的reindex函數,重新索引,當索引不在原表的時候,就會用空值表示。行我們直接索引就行,沒必要那么復雜。(行沒法用reindex,因為有重復的名稱,會報錯)。
以下就是樣表,我們行的順序要是[居民點,農用地,旅游設施],列的順序就是個數,單位,面積。

import pandas as pd
df = pd.read_excel('test.xlsx',index_col=0)
col_sort = ['個數','單位','面積']
row_sort = ['居民點','農用地','旅游設施']
df = df.reindex(columns = col_sort)
df.loc[row_sort]
