Pandas: ใช้ groupby เพื่อคำนวณค่าเฉลี่ยและไม่ละเลย nan
เมื่อใช้ฟังก์ชัน pandas groupby() เพื่อจัดกลุ่มตามคอลัมน์หนึ่งและคำนวณค่าเฉลี่ยของอีกคอลัมน์หนึ่ง pandas จะละเว้นค่า NaN ตามค่าเริ่มต้น
หากคุณต้องการแสดง NaN แทนหากมีค่า NaN อยู่ในคอลัมน์ คุณสามารถใช้ไวยากรณ์พื้นฐานต่อไปนี้:
df. groupby (' team '). agg ({' points ': lambda x: x. mean (skipna= False )})
ตัวอย่างนี้จะจัดกลุ่มแถวของ DataFrame ตามคอลัมน์ Team จากนั้นคำนวณค่าเฉลี่ยของคอลัมน์ Points โดยไม่ละเว้นค่า NaN
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ
ตัวอย่าง: ใช้ pandas groupby() และอย่าละเลย NaN
สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ซึ่งมีข้อมูลเกี่ยวกับผู้เล่นบาสเกตบอลต่างๆ:
import pandas as pd
import numpy as np
#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
' points ': [15, np.nan, 24, 25, 20, 35, 34, 19, 14, 12]})
#view DataFrame
print (df)
team points
0 to 15.0
1 A NaN
2 A 24.0
3 A 25.0
4 A 20.0
5 B 35.0
6 B 34.0
7B 19.0
8B 14.0
9B 12.0
สมมติว่าเราใช้ไวยากรณ์ต่อไปนี้ในการคำนวณค่า คะแนน เฉลี่ย โดยจัดกลุ่มตาม ทีม :
#calculate mean of points, grouped by team
df. groupby (' team ')[' points ']. mean ()
team
At 21.0
B 22.8
Name: points, dtype: float64
โปรดทราบว่าจะมีการส่งคืนค่า คะแนน เฉลี่ยสำหรับแต่ละ ทีม แม้ว่าจะมีค่า NaN สำหรับทีม A ในคอลัมน์คะแนนก็ตาม
ตามค่าเริ่มต้น แพนด้าจะไม่สนใจค่า NaN เมื่อคำนวณค่าเฉลี่ย
หากคุณต้องการแสดง NaN เป็นค่าเฉลี่ยแทน หากมี NaN อยู่จริง คุณสามารถใช้ไวยากรณ์ต่อไปนี้:
#calculate mean points value grouped by team and don't ignore NaNs df. groupby (' team '). agg ({' points ': lambda x: x. mean (skipna= False )}) points team To NaN B 22.8
โปรดทราบว่าค่า NaN จะถูกส่งกลับเป็นค่าคะแนนเฉลี่ยสำหรับทีม A ในครั้งนี้
เมื่อใช้อาร์กิวเมนต์ skipna=False เราบอกแพนด้าว่าอย่าเพิกเฉยต่อค่า NaN เมื่อคำนวณค่าเฉลี่ย
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีการทำงานทั่วไปอื่นๆ ในแพนด้า:
วิธีนับค่าที่ไม่ซ้ำโดยใช้ Pandas GroupBy
วิธีใช้ฟังก์ชันกับ Pandas Groupby
วิธีสร้างพล็อตบาร์จาก Pandas GroupBy