處理分組資料時,通常需要將多個函數應用於多個列。 Pandas 函式庫提供了多種方法來實現此目的,包括 agg 和 apply 方法。但是,這些方法有一定的局限性,可能並不總是滿足特定的用例。
如問題中所提到的,可以將多個函數應用於groupby Series使用字典的物件:
grouped['D'].agg({'result1' : np.sum, 'result2' : np.mean})
這種方法允許將列名指定為鍵,將對應的函數指定為值。但是,這僅適用於 Series groupby 物件。當應用於 groupby DataFrame 時,字典鍵應該是列名,而不是輸出列名。
此問題也探討了在 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 方法,它將整個群組 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中文網其他相關文章!