小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

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

 江南荷葉 2022-07-17 發(fā)布于貴州

作者 |陽哥

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

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

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

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

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

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

importpandasaspdimportakshareasakprint(f'pandasversion:{pd.__version__}')

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

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

第一種方法,也是我自己常用的方法,就是自己將列的名稱按需要進(jìn)行手動(dòng)排序,然后運(yùn)行代碼如下:

Method 2

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

Method 3

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

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

Method 4

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

#Method4,逆序

cols=list(df.columns)

cols.reverse()

df[cols]

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

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

#Method4,逆序

cols=list(df.columns)

df[cols[::-1]]

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

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

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

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

#需要安裝akshare

#pipinstallakshare

years=['2019','2020','2021']

deffund_stock_holding(years,code):

data=pd.DataFrame()

foryrinyears:

df_tmp=ak.fund_em_portfolio_hold(code=code,year=yr)

data=data.append(df_tmp)

data['季度']=data['季度'].apply(lambdax: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['基金代碼']=codereturndfdf=fund_stock_holding(years,'005669')

df

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

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

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

df=df[cols]

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

#需要安裝akshare

#pipinstallakshare

years=['2019','2020','2021']

deffund_stock_holding_update(years,code):

data=pd.DataFrame()

foryrinyears:

df_tmp=ak.fund_em_portfolio_hold(code=code,year=yr)

data=data.append(df_tmp)

data['季度']=data['季度'].apply(lambdax: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]

returndfdf=fund_stock_holding_update(years,'005669')

df

效果如下:

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

小結(jié)

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

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

媒體來源:AI科技大本營

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多