【发布时间】:2019-05-21 06:43:37
【问题描述】:
这是我的数据框的子样本:
idcontrn ctosaldo fecanota diamovto fecopera codsprod
491748 000 2017-08-25 3 2017-08-25 0
1014320 000 2018-05-28 99999 2018-05-28 33
1907630 000 2017-06-12 99999 2017-06-09 21
1573897 000 2018-01-25 613 2018-01-25 0
1713456 000 2017-08-08 17 2017-08-07 0
186315 000 2017-06-29 13 2017-06-28 0
150328 000 2017-10-23 1 2017-10-23 84
1531535 000 2017-04-25 1 2017-04-25 78
我想提取“codsprod”列中出现频率最高的 20 个类别,所以我这样做了:
pd.DataFrame(sample.groupby(['codsprod']).size()).sort_values(by = 0,ascending = False).reset_index()[0:21]
产生:
codsprod 0
0 0 319971
1 76 120026
2 33 62017
3 119 48138
4 14 42180
5 104 40756
6 48 26902
以此类推……直到数字 20。
现在我要做的是通过“codsprod”列的前 20 个类别过滤原始 df。我知道如何根据条件将过滤器应用于 pandas df,但编写如下内容:
sample[sample['codsprod'] == category_number] 对我来说似乎很乏味和漫长,因为我将不得不手动建立 20 个条件,每个类别一个。
有没有更快更简洁的方法来实现这一点??
非常感谢您。
【问题讨论】:
标签: python python-3.x pandas dataframe conditional-statements