Pandas: วิธีสร้างครอสแท็บพร้อมเปอร์เซ็นต์
คุณสามารถใช้อาร์กิวเมนต์ ที่ทำให้เป็นมาตรฐาน ในฟังก์ชัน pandas crosstab() เพื่อสร้างครอสแท็บที่แสดงค่าเปอร์เซ็นต์แทนตัวเลข:
p.d. crosstab (df. col1 , df. col2 , normalize=' index ')
อาร์กิวเมนต์ที่ทำให้เป็นมาตรฐานยอมรับอาร์กิวเมนต์ที่แตกต่างกันสามข้อ:
- all : แสดงเปอร์เซ็นต์ที่สัมพันธ์กับค่าทั้งหมด
- ดัชนี : แสดงเปอร์เซ็นต์เป็นผลรวมของค่าแถว
- คอลัมน์ : แสดงเปอร์เซ็นต์เป็นผลรวมของค่าคอลัมน์
ตัวอย่างต่อไปนี้แสดงวิธีการใช้แต่ละวิธีในทางปฏิบัติกับ Pandas DataFrame ต่อไปนี้:
import pandas as pd #createDataFrame df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C '], ' position ':['G', 'G', 'F', 'G', 'F', 'F', 'F', 'G', 'G', 'F', 'F'], ' points ': [22, 25, 24, 39, 34, 20, 18, 17, 20, 19, 22]}) #view DataFrame print (df) team position points 0 AG 22 1 AG 25 2 AF 24 3 BG 39 4 BF 34 5 BF 20 6 BF 18 7 GC 17 8 GC 20 9 CF 19 10 CF 22
ต่อไปนี้คือลักษณะของครอสแท็บเริ่มต้นสำหรับจำนวนผู้เล่นต่อทีมและตำแหน่ง:
#create crosstab that displays count by team and position
p.d. crosstab (df. team , df. position )
position F G
team
AT 12
B 3 1
C 2 2
ตัวอย่างที่ 1: สร้างครอสแท็บที่มีเปอร์เซ็นต์สัมพันธ์กับค่าทั้งหมด
เราสามารถใช้ฟังก์ชัน crosstab() กับอาร์กิวเมนต์ Normalize=all เพื่อสร้างครอสแท็บที่แสดงเปอร์เซ็นต์ของแต่ละค่าโดยสัมพันธ์กับจำนวนรวมของค่าทั้งหมด:
#create crosstab that displays counts as percentage relative to total count p.d. crosstab (df. team , df. position , normalize=' all ') position F G team A 0.090909 0.181818 B 0.272727 0.090909 C 0.181818 0.181818
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- ผู้เล่นทีม A ในตำแหน่ง F คิดเป็น 9.09% ของผู้เล่นทั้งหมด
- ผู้เล่นทีม A ในตำแหน่ง G คิดเป็น 18.18% ของผู้เล่นทั้งหมด
และอื่นๆ
ตัวอย่างที่ 2: สร้างครอสแท็บที่มีเปอร์เซ็นต์เทียบกับผลรวมแถว
เราสามารถใช้ฟังก์ชัน crosstab() กับอาร์กิวเมนต์ Normalize=index เพื่อสร้างครอสแท็บที่แสดงเปอร์เซ็นต์ของแต่ละค่าที่สัมพันธ์กับผลรวมของแถว:
#create crosstab that displays counts as percentage relative to row totals p.d. crosstab (df. team , df. position , normalize=' index ') position F G team A 0.333333 0.666667 B 0.750000 0.250000 C 0.500000 0.500000
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- ผู้เล่นในตำแหน่ง F คิดเป็น 33.33% ของผู้เล่นทั้งหมดของทีม A
- ผู้เล่นในตำแหน่ง F คิดเป็น 75% ของผู้เล่นทั้งหมดในทีม B
- ผู้เล่นในตำแหน่ง F คิดเป็น 50% ของผู้เล่นทั้งหมดในทีม C
และอื่นๆ
ตัวอย่างที่ 3: สร้างครอสแท็บที่มีเปอร์เซ็นต์เทียบกับผลรวมของคอลัมน์
เราสามารถใช้ฟังก์ชัน crosstab() กับอาร์กิวเมนต์ Normalize=columns เพื่อสร้างครอสแท็บที่แสดงเปอร์เซ็นต์ของแต่ละค่าที่สัมพันธ์กับผลรวมของคอลัมน์:
#create crosstab that displays counts as percentage relative to column totals p.d. crosstab (df. team , df. position , normalize=' columns ') position F G team A 0.166667 0.4 B 0.500000 0.2 C 0.333333 0.4
ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:
- ผู้เล่นทีม A คิดเป็น 16.67% ของผู้เล่นทั้งหมดที่มีตำแหน่ง F
- ผู้เล่นทีม B คิดเป็น 50% ของผู้เล่นทั้งหมดที่มีตำแหน่ง F
- ผู้เล่นทีม C คิดเป็น 33.33% ของผู้เล่นทั้งหมดที่มีตำแหน่ง F
และอื่นๆ
หมายเหตุ : คุณสามารถดูเอกสารฉบับเต็มของฟังก์ชัน pandas crosstab() ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีการทำงานทั่วไปอื่นๆ ในแพนด้า:
Pandas: วิธีใช้ GroupBy และการนับค่า
Pandas: วิธีใช้ GroupBy พร้อมจำนวนถังขยะ
Pandas: วิธีนับค่าในคอลัมน์ที่มีเงื่อนไข