首頁 > web前端 > js教程 > Python 的「groupby」方法如何有效地將物件陣列中的資料分組和聚合?

Python 的「groupby」方法如何有效地將物件陣列中的資料分組和聚合?

Susan Sarandon
發布: 2024-12-22 20:55:11
原創
933 人瀏覽過

How can Python's `groupby` method efficiently group and aggregate data from arrays of objects?

使用GroupBy 方法將數組中的物件分組

Python 強大的groupby 方法可以根據選定的屬性對物件進行高效分組。如果您需要執行此類分組操作,groupby 提供了一個方便的解決方案。

例如,考慮以下物件陣列:

[ 
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 1", Value: "5" },
    { Phase: "Phase 1", Step: "Step 1", Task: "Task 2", Value: "10" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 1", Value: "15" },
    { Phase: "Phase 1", Step: "Step 2", Task: "Task 2", Value: "20" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 1", Value: "25" },
    { Phase: "Phase 2", Step: "Step 1", Task: "Task 2", Value: "30" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 1", Value: "35" },
    { Phase: "Phase 2", Step: "Step 2", Task: "Task 2", Value: "40" }
]
登入後複製

按 Phase將物件分組並計算總和值,我們使用:

from itertools import groupby

def sum_value(objects):
    return sum(int(obj["Value"]) for obj in objects)

objects.sort(key=lambda obj: obj["Phase"])
grouped_by_phase = groupby(objects, key=lambda obj: obj["Phase"])

result = [{
    "Phase": phase,
    "Value": sum_value(objects)
} for phase, objects in grouped_by_phase]

print(result)
登入後複製

這會產生所需的輸出:

[{"Phase": "Phase 1", "Value": 50}, {"Phase": "Phase 2", "Value": 130}]
登入後複製

或者,要按階段和步驟進行分組,我們可以使用多個層級的分組:

grouped_by_phase_and_step = groupby(objects, key=lambda obj: (obj["Phase"], obj["Step"]))

result = [{
    "Phase": phase,
    "Step": step,
    "Value": sum_value(objects)
} for (phase, step), objects in grouped_by_phase_and_step]

print(result)
登入後複製

這將返回:

[{"Phase": "Phase 1", "Step": "Step 1", "Value": 15}, {"Phase": "Phase 1", "Step": "Step 2", "Value": 35}, {"Phase": "Phase 2", "Step": "Step 1", "Value": 55}, {"Phase": "Phase 2", "Step": "Step 2", "Value": 75}]
登入後複製

借助Python多功能的groupby方法,您可以輕鬆有效地對物件數組中的資料進行分組和聚合,滿足您的各種分組需求。

以上是Python 的「groupby」方法如何有效地將物件陣列中的資料分組和聚合?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板