天天看點

[1016]DataFrame一列拆成多列以及一行拆成多行

文章目錄

    • DataFrame一列拆成多列
    • DataFrame一行拆成多行
      • 分割需求
      • 簡要流程
      • 詳細說明
        • 0. 初始資料
        • 1. 使用split拆分
        • 2. 使用stack行轉列
        • 3. 重置索引(删除多餘的索引)并命名為C
        • 4. 使用join合并資料

DataFrame一列拆成多列

  1. 讀取資料
[1016]DataFrame一列拆成多列以及一行拆成多行
  1. 将City列轉成多列(以‘|’為分隔符)

這裡使用匿名函數lambda來講City列拆成兩列。

[1016]DataFrame一列拆成多列以及一行拆成多行

DataFrame一行拆成多行

分割需求

在處理資料過程中,會需要将一條資料拆分為多條,比如:

a|b|c

拆分為

a、b、c

,并結合其他資料顯示為三條資料。

簡要流程

  • 将需要拆分的資料使用

    split

    拆分,并通過

    expand

    功能分成多列
  • 将拆分後的多列資料使用

    stack

    進行列轉行操作,合并成一列
  • 将生成的複合索引重新進行

    reset_index

    保留原始的索引,并命名為

    C

  • 将處理後的資料和原始

    DataFrame

    進行

    join

    操作,預設使用的是索引進行連接配接

詳細說明

0. 初始資料

df
=============================
# 顯示df中的資料
      A    B          C
0    t1    china    a|b|c
1    t2    usa      d|e|f           

複制

1. 使用split拆分

對C列,按照|進行拆分
column_C = df['C'].str.split('|', expand=True)
=================================
# 顯示column_C的資料
    0    1    2
0   a    b    c
1   d    e    f           

複制

2. 使用stack行轉列

column_C = column_C.stack()
=================================
# 顯示column_C的資料
0     0    a
      1    b
      2    c
1     0    d
      1    e
      2    f
## 前兩列是索引,實際上column_C是一個未設定名字的Series           

複制

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

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

複制

4. 使用join合并資料

# 原始資料丢棄C列,然後與column_C合并
df_new = df.drop(['C'], axis=1).join(column_C)
===================================
# 顯示df_new 的資料
      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           

複制

參考:https://blog.csdn.net/Asher117/article/details/84346073/

https://www.jianshu.com/p/0ecda1a41732