使用groupby() 對Pandas DataFrame 中的列執行計算時函數時,通常需要將結果合併回DataFrame 中。實現此目的的一種方法是根據分組計算建立一個新列。
在提供的範例中,目標是建立一個新列Data4,其中包含每個日期的Data3 列的總和.
所提供的程式碼嘗試將分組結果直接分配給新列,但它會產生NaN 值。要解決這個問題,應該使用transform()方法:
df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum')
transform()方法傳回一個與DataFrame索引對齊的Series,允許它直接新增為新欄位。 'sum' 參數指定我們要執行的計算。
下面更新的程式碼示範了transform()的正確應用:
import pandas as pd df = pd.DataFrame({ 'Date': ['2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05', '2015-05-08', '2015-05-07', '2015-05-06', '2015-05-05'], 'Sym': ['aapl', 'aapl', 'aapl', 'aapl', 'aaww', 'aaww', 'aaww', 'aaww'], 'Data2': [11, 8, 10, 15, 110, 60, 100, 40], 'Data3': [5, 8, 6, 1, 50, 100, 60, 120] }) df['Data4'] = df['Data3'].groupby(df['Date']).transform('sum') print(df)
修改後的程式碼的輸出正確計算了每個日期的Data3 的總和,並將結果加到DataFrame 作為新列Data4:
Date Sym Data2 Data3 Data4 0 2015-05-08 aapl 11 5 55 1 2015-05-07 aapl 8 8 108 2 2015-05-06 aapl 10 6 66 3 2015-05-05 aapl 15 1 121 4 2015-05-08 aaww 110 50 55 5 2015-05-07 aaww 60 100 108 6 2015-05-06 aaww 100 60 66 7 2015-05-05 aaww 40 120 121
以上是如何在 groupby().sum() 操作後正確向 Pandas DataFrame 新增列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!