程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

盤點一個Pandas數據處理基礎題目(文末有學習彩蛋)

編輯:Python

點擊上方“Python共享之家”,進行關注

回復“資源”即可獲贈Python學習資料

戍鼓斷人行,邊秋一雁聲。

大家好,我是皮皮。

一、前言

前幾天在Python最強王者交流群【Chloe】問了一道Pandas處理的問題,如下圖所示。

原始數據如下:

df = pd.DataFrame( {'id' : ['A','A','A','A','A','A','B','B','B','B','B'], 
                    'type' : [1,1,1,1,2,2,1,1,1,2,2], 
                    'book' : ['Math','Math','English','Physics','Math','English','Physics','English','Physics','English','English']})
res = df.groupby(['id','type']).book.apply(list).reset_index()
res['book'] = res.apply(lambda x:(','.join([str(i) for i in x['book']])))
res

預期的結果如下圖所示:

二、實現過程

方法一

這裡【月神】給出一個可行的代碼,大家後面遇到了,可以對應的修改下,事半功倍,代碼如下所示:

df.groupby(['id','type']).book.unique().str.join(',').reset_index()

運行之後,結果就是想要的了。

方法二

後來【瑜亮老師】也給了一份代碼。

代碼如下所示:

res = df.groupby(['id', 'type']).book.apply(set).reset_index()
res['book'] = res['book'].apply(lambda x: (','.join(x)))
print(res)

運行之後,結果就是想要的了。

完美地解決了粉絲的問題!

最後再給大家分享一個知識點,如下圖所示。

後來【瑜亮老師】還補充了一個結論,這裡和大家一起分享下。

文章做了對比:
普通apply處理需要18秒左右,
使用Swift進行加速提升到7秒左右,
函數向量化,時間縮短至0.4秒,
int64轉為int16,用時縮短至0.1秒
盡可能轉換為.values,再操作,僅用時0.07秒!!!
從18秒到0.07秒……

三、總結

大家好,我是皮皮。這篇文章主要盤點了一道使用Pandas處理數據的問題,文中針對該問題給出了具體的解析和代碼實現,一共兩個方法,幫助粉絲順利解決了問題。

最後感謝粉絲【Chloe】提問,感謝【月神】、【瑜亮老師】給出的思路和代碼解析,感謝【dcpeng】、【馮誠】、【冷喵】、【D I Y】等人參與學習交流。

小伙伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探討學習。

------------------- End -------------------

往期精彩文章推薦:

  • 一篇文章帶你搞定Pandas繪圖API

  • 網易雲音樂熱門作品名字和鏈接抓取(html5lib篇)

  • 網易雲音樂熱門作品名字和鏈接抓取(pyquery篇)

  • 網易雲音樂熱門作品名字和鏈接抓取(bs4篇)

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習群請在後台回復【

萬水千山總是情,點個【在看】行不行


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved