使用pandas split、explode實現按字符分割列並轉爲多行

假設有這麼一組數據:

>>> df = pd.DataFrame([{'編碼':'01', '價格':'1.1,1.3,3.4', '水果':'蘋果,柿子,梨'},{'編碼':'01', '價格':'2.2,3.4', '水果':'桔子,香蕉'}])
>>> print(df)
   編碼           價格       水果
0  00  1.1,1.3,3.4  蘋果,柿子,1  01      2.2,3.4    桔子,香蕉

其中價格和水果是按照位置一一對應的,如蘋果:1.1、柿子:1.3、梨:3.4,我們希望將價格與水果兩列都拆開,但又不影響水果名與價格的對應關係

   編碼   價格  水果
0  00  1.1  蘋果
1  00  1.3  柿子
2  00  3.43  01  2.2  桔子
4  01  3.4  香蕉

通過如下操作即可實現

>>> df.set_index(['編碼']).apply(lambda x: x.str.split(',').explode()).reset_index()

其中set_index和reset_index()是爲了鎖定編碼列,防止誤將其進行拆分,上面例子中編碼列不存在逗號,因而這步加不加對結果沒有影響。
在使用過程中發現,如果set_index中列數過多容易報錯,因而可將原表拆爲兩部分,一部分爲不需要拆分的列,另一部分僅爲需要拆分的列;然後將後者拆分後再通過某公共列進行merge。
參考:https://stackoverflow.com/a/50731254

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章