Python Pandas 改變數據結構 Reshaping Data

一、案例數據準備

import pandas as pd
# 這裏假設我們有 5 個人,每個人有 2 種屬性數據,共 15 個元素
d = {'name' : pd.Series(['a', 'b', 'c', 'd','e'], index=[0,1,2,3,4]),
   'attri_1' : pd.Series([1.1, 2.2, 3.3, 4.4,5.5], index=[0,1,2,3,4]),
     'attri_2' : pd.Series([1, 2, 3, 4, 5], index=[0,1,2,3,4])
     }

df = pd.DataFrame(d)
print(df)

運行結果:

  name  attri_1  attri_2
0    a      1.1        1
1    b      2.2        2
2    c      3.3        3
3    d      4.4        4
4    e      5.5        5

二、將所有數據展開,匯聚到行顯示

2.1 全展開

df_2 = df.melt()
# 將 5 行 3 列的數據轉化爲 每行 1 個數據,即 15 行數據
# 每一行有 index,variable(原列標籤),value(原列中的各個值)
# 這裏的顯示錶示,我們想要看到所有的 5 個 人名, 5 個 屬性_1 的值, 5個 屬性_2 的值
print(df_2)

運行結果:

   variable value
0      name     a
1      name     b
2      name     c
3      name     d
4      name     e
5   attri_1   1.1
6   attri_1   2.2
7   attri_1   3.3
8   attri_1   4.4
9   attri_1   5.5
10  attri_2     1
11  attri_2     2
12  attri_2     3
13  attri_2     4
14  attri_2     5

2.2 展開特定的列

df_3 = df.melt(id_vars=['name'], var_name = 'attri')
# 以第一列爲錨定,展開後面 2 列,10 種組合
# 我們想查看 5 個人的 屬性_1 分佈,和 屬性_2 分佈
print(df_3)

運行結果:

  name    attri  value
0    a  attri_1    1.1
1    b  attri_1    2.2
2    c  attri_1    3.3
3    d  attri_1    4.4
4    e  attri_1    5.5
5    a  attri_2    1.0
6    b  attri_2    2.0
7    c  attri_2    3.0
8    d  attri_2    4.0
9    e  attri_2    5.0

三、將匯聚的數據分散到列顯示(類似數據透視表)

df_4 = df_3.pivot(index='name',columns='attri',values='value')
# 這種功能類似於 數據透視表,這裏的 'name' 這列已經不再是一列,而是 index
print(df_4)

運行結果:

attri  attri_1  attri_2
name                   
a          1.1      1.0
b          2.2      2.0
c          3.3      3.0
d          4.4      4.0
e          5.5      5.0

3.1 顯示其中一列

print(df_4['attri_1']) # 顯示 attri_1 這一列的元素

運行結果:

name
a    1.1
b    2.2
c    3.3
d    4.4
e    5.5
Name: attri_1, dtype: float64

3.2 顯示其中一行

print(df_4.loc['b']) # 顯示 'b' 這一行的元素

運行結果:

attri
attri_1    2.2
attri_2    2.0
Name: b, dtype: float64
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章