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: วิธีนับค่าในคอลัมน์ที่มีเงื่อนไข

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *