วิธีการคำนวณออฟเซ็ตต่อกลุ่มใน pandas


คุณสามารถใช้วิธีการต่อไปนี้เพื่อคำนวณค่าที่เลื่อนกลุ่มใน Pandas DataFrame:

วิธีที่ 1: คำนวณออฟเซ็ตตามกลุ่ม

 df[' lagged_values '] = df. groupby ([' group '])[' values ']. shift ( 1 )

วิธีที่ 2: คำนวณออฟเซ็ตด้วยหลายกลุ่ม

 df[' lagged_values '] = df. groupby ([' group1 ', ' group2 '])[' values ']. shift ( 1 )

โปรดทราบว่าค่าของฟังก์ชัน shift() ระบุจำนวนค่าที่จะคำนวณกะ

ตัวอย่างต่อไปนี้แสดงวิธีการใช้แต่ละวิธีในทางปฏิบัติ

ตัวอย่างที่ 1: คำนวณออฟเซ็ตตามกลุ่ม

สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ที่แสดงยอดขายของร้านค้าสองแห่งในวันติดต่อกัน:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  blind sales
0 to 18
1 to 10
2 to 14
3 to 13
4 B 19
5 B 24
6 B 25
7 B 29

เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อสร้างคอลัมน์ออฟเซ็ตที่แสดงยอดขายของวันก่อนหน้าสำหรับร้านค้าแต่ละแห่ง:

 #add column that displays lag of sales column by store
df[' lagged_sales '] = df. groupby ([' store '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store sales lagged_sales
0 to 18 NaN
1 to 10 18.0
2 A 14 10.0
3 A 13 14.0
4 B 19 NaN
5 B 24 19.0
6 B 25 24.0
7 B 29 25.0

ต่อไปนี้เป็นวิธีการตีความผลลัพธ์:

  • ค่าแรกในคอลัมน์ออฟเซ็ตคือ NaN เนื่องจากไม่มีค่าก่อนหน้าในคอลัมน์การขายสำหรับร้านค้า A
  • ค่าที่สองในคอลัมน์ออฟเซ็ตคือ 18 เนื่องจากเป็นค่าก่อนหน้าในคอลัมน์ยอดขายสำหรับร้านค้า A

และอื่นๆ

ตัวอย่างที่ 2: คำนวณออฟเซ็ตด้วยหลายกลุ่ม

สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ที่แสดงยอดขายของพนักงานของร้านค้าสองแห่งในวันติดต่อกัน:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' store ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' employee ':['O', 'O', 'R', 'R', 'O', 'O', 'R', 'R'],
                   ' sales ': [18, 10, 14, 13, 19, 24, 25, 29]})
#view DataFrame
print (df)

  store employee sales
0 AO 18
1 AO 10
2 AR 14
3 AR 13
4 BO 19
5 BO 24
6 BR 25
7 BR 29

เราสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อสร้างคอลัมน์ออฟเซ็ตที่แสดงยอดขายของวันก่อนหน้าสำหรับพนักงานแต่ละคนในร้านค้าแต่ละแห่ง:

 #add column that displays lag of sales column by store and employee
df[' lagged_sales '] = df. groupby ([' store ',' employee '])[' sales ']. shift ( 1 )

#view updated DataFrame
print (df)

  store employee sales lagged_sales
0 AO 18 NaN
1 AO 10 18.0
2 AR 14 NaN
3 AR 13 14.0
4 BO 19 NaN
5 BO 24 19.0
6 BR 25 NaN
7 BR 29 25.0

คอลัมน์ lagged_sales ใหม่จะแสดงยอดขายของวันก่อนหน้าสำหรับพนักงานแต่ละคนในร้านค้าแต่ละแห่ง

หมายเหตุ : ในตัวอย่างนี้ เราได้จัดกลุ่มตามสองคอลัมน์ แต่คุณสามารถจัดกลุ่มตามคอลัมน์ได้มากเท่าที่คุณต้องการ โดยรวมชื่อตัวแปรได้มากเท่าที่คุณต้องการในฟังก์ชัน groupby()

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีการทำงานทั่วไปอื่นๆ ในแพนด้า:

วิธีลบคอลัมน์ใน Pandas
วิธีแยกคอลัมน์ใน Pandas
วิธีใช้ฟังก์ชันกับคอลัมน์ที่เลือกใน Pandas
วิธีเปลี่ยนลำดับคอลัมน์ใน Pandas DataFrame

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

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