日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pandas实用技能,将列(column)排序的几种方法

發布時間:2024/9/15 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pandas实用技能,将列(column)排序的几种方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

來源:Python數據之道 (ID:PyDataLab)

作者:陽哥

Pandas 可以說是 在Python數據科學領域應用最為廣泛的工具之一。

Pandas是一種高效的數據處理庫,它以 dataframe 和 series 為基本數據類型,呈現出類似excel的二維數據。

在數據處理過程中,咱們經常需要將列按照一定的要求進行排序,以方便展示。

這里,陽哥來給大家分享下 在 Pandas 中將列排序的幾種常用方法。

數據準備

文中主要使用了 pandas 和 akshare ,首先導入 Python 庫,如下:

import?pandas?as?pd import?akshare?as?akprint(f'pandas?version:?{pd.__version__}')

本次使用的數據如下:

data?=?{'brand':['Python數據之道','價值前瞻','菜鳥數據之道','Python','Java'],'B':[4,6,8,12,10],'A':[10,2,5,20,16],'D':[6,18,14,6,12],'years':[4,1,1,30,30],'C':[8,12,18,8,2], }df?=?pd.DataFrame(data=data) df

現將現有的 columns 輸出,方便后面 copy 使用。

df.columns#?Index(['brand',?'B',?'A',?'D',?'years',?'C'],?dtype='object')

Method 1

第一種方法,也是我自己常用的方法,就是自己將列的名稱按需要進行手動排序,然后運行代碼如下:

Method 2

第二種方法,是使用 .iloc 方法,通過列的位置來進行排序,如下:

Method 3

第三種方法,是使用 .loc 方法,通過列的名稱來進行排序,如下:

這種方法跟第一種方法類似,個人覺得第一種方法更簡潔些。

Method 4

第四種是 逆序 排序,算是排序中一種特定的排序方式。

#?Method?4?,逆序cols?=?list(df.columns)cols.reverse()df[cols]

上述代碼中,cols.reverse() 是將列表(list)進行逆序排序。

此外,列表(list)的逆序排序,還可以用 cols[::-1] 來實現。因此,下面的方法也可以實現逆序排序。

#?Method?4?,逆序cols?=?list(df.columns)df[cols[::-1]]

關于 Python數據類型 list 的介紹,詳細內容可以前往下面的鏈接:

  • Python數據類型-List介紹(上)

  • Python數據類型-List介紹(下)-列表推導式

實戰案例:自由排序

有時候,當存在變量、列的數量較多,或者不同的dataframe中列的名稱不完全一致等情況出現時,咱們不一定會通過列名稱來實現排序。

這里分享一個實戰案例,是關于制作基金的十大持倉數據表的,具體過程我就不在這里描述了,下面給出實現的函數,有興趣的同學可以研究下。

自定義函數如下:

#?需要安裝?akshare #?pip?install?akshareyears?=?['2019','2020','2021']def?fund_stock_holding(years,code):data?=?pd.DataFrame()for?yr?in?years:df_tmp?=?ak.fund_em_portfolio_hold(code=code,year=yr)data?=?data.append(df_tmp)data['季度']=data['季度'].apply(lambda?x:x[:8])data['占凈值比例']?=?pd.to_numeric(data['占凈值比例'])data?=?data.sort_values(['季度','持倉市值'],ascending=[True,False])df?=?data.set_index(['序號','季度']).stack().unstack([1,2]).head(10)df?=?df.loc[:,(slice(None),?'股票名稱')]df?=?df.droplevel(None,axis=1)df.columns.name=Nonedf?=?df.reset_index() #?????df.index.name?=?Nonedf['基金代碼']?=?codereturn?dfdf?=?fund_stock_holding(years,'005669') df

得到的數據表格如下:

上面的表格中,我需要將 基金代碼 這一列移動到 序號 這列的后面,由于 years = ['2019','2020','2021'] 這是一個變量,當具體的值不同時,會導致列名稱不一樣,因此,在這種情況下我們不能直接使用列的具體名稱,但咱們可以通過 列的位置組合來實現,列的調整具體如下:

cols?=?df.columns.tolist()cols?=?cols[:1]?+?cols[-1:]?+?cols[1:-1]??#?將基金代碼列名放前面df?=?df[cols]

將上面的調整過程整合到自定義函數中,完整的代碼如下:

#?需要安裝?akshare #?pip?install?akshareyears?=?['2019','2020','2021']def?fund_stock_holding_update(years,code):data?=?pd.DataFrame()for?yr?in?years:df_tmp?=?ak.fund_em_portfolio_hold(code=code,year=yr)data?=?data.append(df_tmp)data['季度']=data['季度'].apply(lambda?x:x[:8])data['占凈值比例']?=?pd.to_numeric(data['占凈值比例'])data?=?data.sort_values(['季度','持倉市值'],ascending=[True,False])df?=?data.set_index(['序號','季度']).stack().unstack([1,2]).head(10)df?=?df.loc[:,(slice(None),?'股票名稱')]df?=?df.droplevel(None,axis=1)df.columns.name=Nonedf?=?df.reset_index() #?????df.index.name?=?Nonedf['基金代碼']?=?codecols?=?df.columns.tolist()cols?=?cols[:1]?+?cols[-1:]?+?cols[1:-1]??#?將基金代碼列名放前面df?=?df[cols]return?dfdf?=?fund_stock_holding_update(years,'005669') df

效果如下:

當然,我最后實現的效果是將基金代碼換成基金名稱,這個可以想辦法實現,效果如下:

小結

以上就是關于 Pandas 中 列名稱排序的介紹,看似很簡單的內容,在最后的實踐中,也還是有些小技巧的。

歡迎大家來暢聊,Pandas 中有哪些實用的小技巧~~

E?N?D各位伙伴們好,詹帥本帥假期搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)推薦閱讀牛逼!Python常用數據類型的基本操作(長文系列第①篇) 牛逼!Python的判斷、循環和各種表達式(長文系列第②篇)牛逼!Python函數和文件操作(長文系列第③篇)牛逼!Python錯誤、異常和模塊(長文系列第④篇) 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Pandas实用技能,将列(column)排序的几种方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。