เอกสารแสดงวิธีการใช้ฟังก์ชั่นหลายคนบนวัตถุ GroupBy ในเวลาใช้ Dict ที่มีชื่อคอลัมน์ออกเป็นกุญแจ:
In [563]: grouped['D'].agg({'result1' : np.sum,
.....: 'result2' : np.mean})
.....:
Out[563]:
result2 result1
A
bar -0.579846 -1.739537
foo -0.280588 -1.402938
อย่างไรก็ตามสิ่งนี้ใช้ได้กับวัตถุ Groupby ซีรีย์เท่านั้น และเมื่อ dict ถูกส่งผ่านไปยัง groupby DataFrame ในทำนองเดียวกันก็คาดว่าคีย์จะเป็นชื่อคอลัมน์ที่ฟังก์ชั่นจะถูกนำไปใช้
สิ่งที่ฉันต้องการทำคือใช้หลายฟังก์ชั่นกับหลายคอลัมน์ (แต่คอลัมน์บางคอลัมน์จะทำงานหลายครั้ง) นอกจากนี้บางฟังก์ชั่นจะขึ้นอยู่กับคอลัมน์อื่น ๆ ในวัตถุ groupby (เช่นฟังก์ชัน sumif) ทางออกปัจจุบันของฉันคือไปทีละคอลัมน์และทำบางอย่างเช่นโค้ดด้านบนโดยใช้ lambdas สำหรับฟังก์ชั่นที่ขึ้นอยู่กับแถวอื่น ๆ แต่มันใช้เวลานาน (ฉันคิดว่ามันต้องใช้เวลานานกว่าจะย้ำผ่านวัตถุกลุ่มโดย) ฉันจะต้องเปลี่ยนมันเพื่อที่ฉันจะวนซ้ำไปตามวัตถุทั้งหมดของกลุ่มในการวิ่งครั้งเดียว แต่ฉันสงสัยว่าถ้ามีแพนด้าในตัวเพื่อทำสิ่งนี้ค่อนข้างเรียบร้อย
ตัวอย่างเช่นฉันได้ลองทำสิ่งที่ชอบ
grouped.agg({'C_sum' : lambda x: x['C'].sum(),
'C_std': lambda x: x['C'].std(),
'D_sum' : lambda x: x['D'].sum()},
'D_sumifC3': lambda x: x['D'][x['C'] == 3].sum(), ...)
แต่ตามที่คาดไว้ฉันได้รับ KeyError (เนื่องจากคีย์ต้องเป็นคอลัมน์หากagg
ถูกเรียกจาก DataFrame)
มีวิธีใดที่จะทำในสิ่งที่ฉันต้องการหรือความเป็นไปได้ที่อาจมีการเพิ่มฟังก์ชั่นนี้หรือฉันจะต้องทำซ้ำผ่านกลุ่มด้วยตนเองหรือไม่
ขอบคุณ