pandas 的groupby 函數中的apply 方法,當groupby 物件時,允許使用者對每個群組執行自訂操作。然而,在某些情況下,apply 方法表現出的行為可能會令人費解,因為它似乎在資料集中的第一組上執行了兩次指定的函數。
在本文中,我們將深入研究找出這種行為背後的原因,並根據特定用例探索修改組的替代方法。
apply 方法在第一組上的雙重執行是有意的設計選擇。此方法需要確定指定函數傳回的資料的形狀,以有效地將其與現有的DataFrame結合。它透過呼叫函數兩次來實現此目的:
雖然這兩次呼叫可能看起來沒有必要,但它對於確保傳回資料與 DataFrame 的完整性和相容性至關重要。
根據所需的操作,使用者可以利用替代函數來實現類似的結果,而不會遇到雙重執行行為:
在大多數情況下,在第一組上雙重執行 apply 不會造成重大問題,特別是在應用的函數沒有副作用的情況下。但是,如果函數確實修改了 DataFrame,則了解此行為以避免意外後果非常重要。
要解決此問題,請考慮將 apply 的結果指派給新對象,而不是直接修改原始 DataFrame。這確保了雙重執行不會影響現有數據。
例如,以下程式碼示範如何使用apply 方法來修改DataFrame 而沒有副作用:
<code class="python">import pandas as pd df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count': [1, 0, 2]}) def checkit(group): print(group) df.groupby('class', group_keys = True).apply(checkit)</code>
由於apply 的雙重執行,此程式碼將列印每個組兩次。但是,它不會修改原始 df.相反,以下程式碼將增加每個組的計數列:
<code class="python">import pandas as pd df = pd.DataFrame({'class': ['A', 'B', 'C'], 'count': [1, 0, 2]}) def checkit(group): print(group) df.groupby('class', group_keys = True).apply(checkit)</code>
雖然 apply 仍會將每組列印兩次,但它只會為每組增加一次計數,如更新後的 df 所示。
以上是為什麼 Pandas 的 GroupBy.apply 方法在第一組上執行兩次?的詳細內容。更多資訊請關注PHP中文網其他相關文章!