Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python – คำนวณผลรวมค่าบวกและค่าลบแยกกันด้วย GroupBy ใน Pandas

บทความนี้สาธิตวิธีใช้ GroupBy คำนวณผลรวมของค่าบวกและค่าลบแยกกันในแต่ละกลุ่ม

โค้ดตัวอย่าง

import pandas as pd

# สร้าง DataFrame: สถานที่และอุณหภูมิ (มีทั้งบวกและลบ)
dataFrame = pd.DataFrame({
    'Place': ['Chicago', 'Denver', 'Atlanta', 'Chicago', 'Dallas', 'Denver', 'Dallas', 'Atlanta'],
    'Temperature': [-2, 30, -5, 10, 30, -5, 20, -10]
})

print("DataFrame ต้นฉบับ:")
print(dataFrame)

# จัดกลุ่มตาม Place
groupRes = dataFrame.groupby(dataFrame['Place'])

# ฟังก์ชัน Lambda สำหรับผลรวมค่าบวกและลบ
def plus(val):
    return val[val > 0].sum()

def minus(val):
    return val[val < 0].sum()

# ใช้ agg() กับฟังก์ชันที่กำหนดเอง
result = groupRes['Temperature'].agg([('negTemp', minus), ('posTemp', plus)])

print("\nผลรวมค่าลบและค่าบวกแยกกัน:")
print(result)

ผลลัพธ์

DataFrame ต้นฉบับ:
     Place  Temperature
0  Chicago           -2
1   Denver           30
2  Atlanta           -5
3  Chicago           10
4   Dallas           30
5   Denver           -5
6   Dallas           20
7  Atlanta          -10

ผลรวมค่าลบและค่าบวกแยกกัน:
        negTemp  posTemp
Place                   
Atlanta     -15        0
Chicago      -2       10
Dallas        0       50
Denver       -5       30

อธิบาย Logic

  • val[val > 0] กรองเฉพาะค่าบวกในกลุ่ม
  • .sum() รวมค่าที่กรองได้
  • agg([('name', func), ...]) ใช้หลายฟังก์ชันพร้อมกันและตั้งชื่อคอลัมน์ผลลัพธ์

วิธีทางเลือก: ใช้ Lambda โดยตรง

result = groupRes['Temperature'].agg(
    negTemp=lambda x: x[x < 0].sum(),
    posTemp=lambda x: x[x > 0].sum()
)
print(result)

การขยาย: เพิ่มสถิติอื่นๆ

result = groupRes['Temperature'].agg(
    count=('Temperature', 'size'),
    neg_sum=('Temperature', lambda x: x[x < 0].sum()),
    pos_sum=('Temperature', lambda x: x[x > 0].sum()),
    neg_count=('Temperature', lambda x: (x < 0).sum()),
    pos_count=('Temperature', lambda x: (x > 0).sum()),
    mean=('Temperature', 'mean')
)
print(result)

การประยุกต์ใช้

  • Financial: กำไร/ขาดทุนแยกตามสาขา
  • Physics: แรง/ความเร็ว ทิศทางบวก/ลบ
  • Quality Control: ค่าสูง/ต่ำกว่ามาตรฐาน
  • Sentiment Analysis: Positive/Negative Scores