如何將DataFrame數(shù)據(jù)分割為多行?

分割需求

在處理數(shù)據(jù)過程中,會(huì)需要將一條數(shù)據(jù)拆分為多條,比如:a|b|c拆分為a、bc,并結(jié)合其他數(shù)據(jù)顯示為三條數(shù)據(jù)。

簡(jiǎn)要流程

  1. 將需要拆分的數(shù)據(jù)使用split拆分,并通過expand功能分成多列
  2. 將拆分后的多列數(shù)據(jù)使用stack進(jìn)行列轉(zhuǎn)行操作,合并成一列
  3. 將生成的復(fù)合索引重新進(jìn)行reset_index保留原始的索引,并命名為C
  4. 將處理后的數(shù)據(jù)和原始DataFrame進(jìn)行join操作,默認(rèn)使用的是索引進(jìn)行連接

詳細(xì)說明

0. 初始數(shù)據(jù)

df
=============================
# 顯示df中的數(shù)據(jù)
      A    B          C
0    t1    china    a|b|c
1    t2    usa      d|e|f

1. 使用split拆分

對(duì)C列,按照|進(jìn)行拆分

column_C = df['C'].str.split('|', expand=True)
=================================
# 顯示column_C的數(shù)據(jù)
    0    1    2
0   a    b    c
1   d    e    f

2. 使用stack行轉(zhuǎn)列

column_C = column_C.stack()
=================================
# 顯示column_C的數(shù)據(jù)
0     0    a
      1    b
      2    c
1     0    d
      1    e
      2    f
## 前兩列是索引,實(shí)際上column_C是一個(gè)未設(shè)置名字的Series

3. 重置索引(刪除多余的索引)并命名為C

column_C = column_C.reset_index(level=1, drop=True, name='C')
==================================
# 顯示column_C的數(shù)據(jù)
0    a
0    b
0    c
1    d
1    e
1    f
Name: C, dtype: object

4. 使用join合并數(shù)據(jù)

# 原始數(shù)據(jù)丟棄C列,然后與column_C合并
df_new = df.drop(['C'], axis=1).join(column_C)
===================================
# 顯示df_new 的數(shù)據(jù)
      A    B          C
0    t1    china      a
0    t1    china      b
0    t1    china      c
1    t2    usa        d
1    t2    usa        e
1    t2    usa        f
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容