點擊上方“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學習群請在後台回復【入群】
萬水千山總是情,點個【在看】行不行