Pandas: วิธีใช้ groupby กับ diff
คุณสามารถใช้ไวยากรณ์พื้นฐานต่อไปนี้เพื่อใช้ฟังก์ชัน groupby() กับฟังก์ชัน diff() ในหมีแพนด้า:
df = df. sort_values (by=[' group_var1 ', ' group_var2 ']) df[' diff '] = df. groupby ([' group_var1 '])[' values_var ']. diff (). fillna ( 0 )
ตัวอย่างนี้จะเรียงลำดับแถวของ DataFrame ตามตัวแปรเฉพาะสองตัว จากนั้นจัดกลุ่มตาม group_var1 และคำนวณความแตกต่างระหว่างแถวในคอลัมน์ Values_var
โปรดทราบว่า fillna(0) บอกให้แพนด้าใส่ศูนย์เมื่อใดก็ตามที่ค่าของตัวแปรกลุ่มเปลี่ยนแปลงระหว่างบรรทัดที่ต่อเนื่องกันใน DataFrame
ตัวอย่างต่อไปนี้แสดงวิธีใช้ไวยากรณ์นี้ในทางปฏิบัติ
ตัวอย่าง: วิธีใช้ groupby กับ diff ใน Pandas
สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ซึ่งมียอดขายรวมของร้านค้าสองแห่งที่แตกต่างกันในวันที่ต่างกัน:
import pandas as pd #createDataFrame df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'], ' date ': pd. to_datetime (['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04']), ' sales ': [12, 15, 24, 24, 14, 19, 12, 38]}) #view DataFrame print (df) blind date sales 0 A 2022-01-01 12 1 A 2022-01-02 15 2 A 2022-01-03 24 3 A 2022-01-04 24 4 B 2022-01-01 14 5 B 2022-01-02 19 6 B 2022-01-03 12 7 B 2022-01-04 38
ตอนนี้สมมติว่าเราต้องการสร้างคอลัมน์ใหม่ที่เรียกว่า sales_diff ซึ่งมีค่าความแตกต่างในมูลค่าการขายระหว่างวันที่ติดต่อกันโดยจัดกลุ่มตามร้านค้า
เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อทำสิ่งนี้:
#sort DataFrame by store and date
df = df. sort_values (by=[' store ', ' date '])
#create new column that contains difference between sales grouped by store
df[' sales_diff '] = df. groupby ([' store '])[' sales ']. diff (). fillna ( 0 )
#view update DataFrame
print (df)
store date sales sales_diff
0 A 2022-01-01 12 0.0
1 A 2022-01-02 15 3.0
2 A 2022-01-03 24 9.0
3 A 2022-01-04 24 0.0
4 B 2022-01-01 14 0.0
5 B 2022-01-02 19 5.0
6 B 2022-01-03 12 -7.0
7 B 2022-01-04 38 26.0
คอลัมน์ sales_diff ใหม่มีความแตกต่างในมูลค่าการขายระหว่างวันที่ติดต่อกันโดยจัดกลุ่มตามร้านค้า
ตัวอย่างเช่น เราเห็น:
- ความแตกต่างในยอดขายของร้านค้า A ระหว่างวันที่ 1/1/2565 และ 1/2/2565 คือ 3
- ความแตกต่างในยอดขายของร้านค้า A ระหว่าง 02/01/2022 และ 03/01/2022 คือ 9
- ความแตกต่างในยอดขายของร้านค้า A ระหว่าง 3/1/2565 และ 4/1/2565 คือ 0
และอื่นๆ
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทั่วไปอื่น ๆ ในแพนด้า:
วิธีดำเนินการผลรวม GroupBy ใน Pandas
วิธีใช้ Groupby และ Plot ใน Pandas
วิธีนับค่าที่ไม่ซ้ำโดยใช้ GroupBy ใน Pandas