在GroupBy 時保留其他欄位
在Pandas 資料框中,使用groupby 根據特定列過濾行可能會導致其他列輸出中的列。在執行分組操作(例如查找列的最小值並排除低於閾值的行)時會出現此問題。
要克服此限制並在groupby 期間保留其他列,有幾種方法:
方法1:使用idxmin()
idxmin( ) 傳回給定列中具有最小值的行的索引。透過使用此功能,我們可以選擇特定的行並保留其所有列:
<code class="python">df_filtered = df.loc[df.groupby("item")["diff"].idxmin()]</code>
方法2:排序和優先
按列對資料幀進行排序被過濾,然後取每組的第一個元素也會保留其他欄位:
<code class="python">df_filtered = df.sort_values("diff").groupby("item", as_index=False).first()</code>
兩種方法產生相同的結果,如下例所示:
<code class="python">df = pd.DataFrame({"item": [1, 1, 1, 2, 2, 2, 2, 3, 3], "diff": [2, 1, 3, -1, 1, 4, -6, 0, 2], "otherstuff": [1, 2, 7, 0, 3, 9, 2, 0, 9]}) # Method 1 df_filtered1 = df.loc[df.groupby("item")["diff"].idxmin()] # Method 2 df_filtered2 = df.sort_values("diff").groupby("item", as_index=False).first() print(df_filtered1) print(df_filtered2)</code>
輸出:
item diff otherstuff 1 1 1 2 6 2 -6 2 7 3 0 0 item diff otherstuff 0 1 1 2 1 2 -6 2 2 3 0 0
以上是在 Pandas 中使用 GroupBy 時如何保留其他欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!