gpt4 book ai didi

python - 使用基于组的条件删除一些 Pandas 数据框行

转载 作者:太空狗 更新时间:2023-10-30 00:40:53 25 4
gpt4 key购买 nike

比方说,我有一些销售数据,想看看不同邮政编码的比较:有些邮政编码比其他邮政编码带来的业务利润更高吗?所以我按邮政编码分组,并且可以轻松地根据每个邮政编码获取各种统计数据。然而,有一些非常高值(value)的工作会扭曲统计数据,所以我想做的是忽略异常值。出于各种原因,我想做的是按组定义异常值:因此,例如,删除数据框中位于其组前 xth 个百分位数或组中前 n 个的行。

所以如果我有以下数据框:

>>> df
Out[67]:
A C D
0 foo -0.536732 0.061055
1 bar 1.470956 1.350996
2 foo 1.981810 0.676978
3 bar -0.072829 0.417285
4 foo -0.910537 -1.634047
5 bar -0.346749 -0.127740
6 foo 0.959957 -1.068385
7 foo -0.640706 2.635910

我希望能够有一些功能,比如说 drop_top_n(df, group_column, value_column, number_to_drop) 其中 drop_top_n(df, "A", "C", 2 ) 会返回

     A         C         D
0 foo -0.536732 0.061055
4 foo -0.910537 -1.634047
5 bar -0.346749 -0.127740
7 foo -0.640706 2.635910

使用 filter 删除整个组,而不是部分组。

我想我可以遍历这些组,并为每个组找出要删除的行,然后返回到原始数据框并删除它们,但这看起来非常笨拙。有没有更好的办法?

最佳答案

在 0.13 中你可以使用 cumcount :

In [11]: df[df.sort('C').groupby('A').cumcount(ascending=False) >= 2]  # use .sort_index() to remove UserWarning
Out[11]:
A C D
0 foo -0.536732 0.061055
4 foo -0.910537 -1.634047
5 bar -0.346749 -0.127740
7 foo -0.640706 2.635910

[4 rows x 3 columns]

先排序可能更有意义:

In [21]: df = df.sort('C')

In [22]: df[df.groupby('A').cumcount(ascending=False) >= 2]
Out[22]:
A C D
4 foo -0.910537 -1.634047
7 foo -0.640706 2.635910
0 foo -0.536732 0.061055
5 bar -0.346749 -0.127740

[4 rows x 3 columns]

关于python - 使用基于组的条件删除一些 Pandas 数据框行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com