在 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中文网其他相关文章!