<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Pandas實用技能,將列(column)排序的幾種方法

          共 3522字,需瀏覽 8分鐘

           ·

          2021-10-17 07:25

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

          作者:陽哥

          Pandas 可以說是 在Python數(shù)據(jù)科學(xué)領(lǐng)域應(yīng)用最為廣泛的工具之一。

          Pandas是一種高效的數(shù)據(jù)處理庫,它以 dataframeseries 為基本數(shù)據(jù)類型,呈現(xiàn)出類似excel的二維數(shù)據(jù)。

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

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

          數(shù)據(jù)準(zhǔn)備

          文中主要使用了 pandasakshare ,首先導(dǎo)入 Python 庫,如下:

          import?pandas?as?pd
          import?akshare?as?ak

          print(f'pandas?version:?{pd.__version__}')

          本次使用的數(shù)據(jù)如下:

          data?=?{
          ????'brand':['Python數(shù)據(jù)之道','價值前瞻','菜鳥數(shù)據(jù)之道','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

          現(xiàn)將現(xiàn)有的 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] 來實現(xiàn)。因此,下面的方法也可以實現(xiàn)逆序排序。

          #?Method?4?,逆序

          cols?=?list(df.columns)

          df[cols[::-1]]

          關(guān)于 Python數(shù)據(jù)類型 list 的介紹,詳細內(nèi)容可以前往下面的鏈接:

          實戰(zhàn)案例:自由排序

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

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

          自定義函數(shù)如下:

          #?需要安裝?akshare
          #?pip?install?akshare

          years?=?['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=None
          ????df?=?df.reset_index()
          #?????df.index.name?=?None
          ????df['基金代碼']?=?code
          ????return?df
          ????
          df?=?fund_stock_holding(years,'005669')
          df

          得到的數(shù)據(jù)表格如下:

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

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

          將上面的調(diào)整過程整合到自定義函數(shù)中,完整的代碼如下:

          #?需要安裝?akshare
          #?pip?install?akshare

          years?=?['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=None
          ????df?=?df.reset_index()
          #?????df.index.name?=?None
          ????df['基金代碼']?=?code
          ????cols?=?df.columns.tolist()
          ????cols?=?cols[:1]?+?cols[-1:]?+?cols[1:-1]??#?將基金代碼列名放前面
          ????df?=?df[cols]
          ????return?df
          ????
          df?=?fund_stock_holding_update(years,'005669')
          df

          效果如下:

          當(dāng)然,我最后實現(xiàn)的效果是將基金代碼換成基金名稱,這個可以想辦法實現(xiàn),效果如下:

          小結(jié)

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

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

          E?N?D


          各位伙伴們好,詹帥本帥假期搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦!(歡迎提建議)

          推薦閱讀


          牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)

          牛逼!Python的判斷、循環(huán)和各種表達式(長文系列第②篇)

          牛逼!Python函數(shù)和文件操作(長文系列第③篇)

          牛逼!Python錯誤、異常和模塊(長文系列第④篇)


          瀏覽 46
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  成人三级片在线免费观看 | 免费黄色欧美 | 日本极品视频 | 欧美成人破处视频 | 91视频直播做爱 |