首頁 >後端開發 >Python教學 >如何有效率地將多個函數應用於 Pandas 中的多個 GroupBy 欄位?

如何有效率地將多個函數應用於 Pandas 中的多個 GroupBy 欄位?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-13 18:01:12606瀏覽

How Can I Efficiently Apply Multiple Functions to Multiple GroupBy Columns in Pandas?

將多個函數應用於多個GroupBy 欄位

簡介

處理分組資料時,通常需要將多個函數應用於多個列。 Pandas 函式庫提供了多種方法來實現此目的,包括 agg 和 apply 方法。但是,這些方法有一定的局限性,可能並不總是滿足特定的用例。

將agg 與Dict 一起使用

如問題中所提到的,可以將多個函數應用於groupby Series使用字典的物件:

grouped['D'].agg({'result1' : np.sum,
                   'result2' : np.mean})

這種方法允許將列名指定為鍵,將對應的函數指定為值。但是,這僅適用於 Series groupby 物件。當應用於 groupby DataFrame 時,字典鍵應該是列名,而不是輸出列名。

將 agg 與 Lambda 函數結合使用

此問題也探討了在 agg 中使用 lambda 函數來執行基於 groupby 物件中其他欄位的操作。當您的函數涉及對其他列的依賴時,此方法適用。雖然agg 方法沒有明確支持,但可以透過手動將列名稱指定為字串來解決此限制:

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(), ...)

此方法允許將多個函數應用於不同的列,包括那些依賴其他列的函數。但是,它可能很冗長,並且需要仔細處理列名稱。

將 apply 與自訂函數一起使用

更靈活的方法是使用 apply 方法,它將整個群組 DataFrame 傳遞給提供的功能。這允許在群組內的列之間執行更複雜的操作和互動:

def f(x):
    d = {}
    d['a_sum'] = x['a'].sum()
    d['a_max'] = x['a'].max()
    d['b_mean'] = x['b'].mean()
    d['c_d_prodsum'] = (x['c'] * x['d']).sum()
    return pd.Series(d, index=['a_sum', 'a_max', 'b_mean', 'c_d_prodsum'])

df.groupby('group').apply(f)

透過傳回具有適當標記的列的系列,您可以輕鬆地在 groupby DataFrame 上執行多個計算。這種方法更加通用,並且允許基於多個列進行複雜的操作。

結論

將多個函數應用於多個分組列需要仔細考慮資料結構和所需的操作。 agg 方法適合對 Series 物件進行簡單操作,而 apply 方法在使用 groupby DataFrame 或執行複雜計算時提供更大的靈活性。

以上是如何有效率地將多個函數應用於 Pandas 中的多個 GroupBy 欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn