python - 如何使用 pandas 返回前 10 个频繁列值?

标签 python python-3.x csv pandas

我正在使用一个众所周知的犯罪数据集。它看起来像这样:

Dates,Category,Descript,DayOfWeek,PdDistrict,Resolution,Address,X,Y,Time
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM OF VEHICLES",Wednesday,TENDERLOIN,NONE,TURK ST / JONES ST,-122.41241426358101,37.7830037964534,22:30:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM",Wednesday,NORTHERN,NONE,1500 Block of FILLMORE ST,-122.432743822617,37.7838424505847,20:45:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM",Wednesday,NORTHERN,NONE,1100 Block of FILLMORE ST,-122.431979576386,37.7800478529923,17:07:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM OF VEHICLES",Wednesday,TENDERLOIN,NONE,LEAVENWORTH ST / EDDY ST,-122.414242955907,37.783724025447796,17:00:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM OF VEHICLES",Wednesday,CENTRAL,NONE,CALIFORNIA ST / STOCKTON ST,-122.40753977435699,37.79224917725779,16:45:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM",Wednesday,BAYVIEW,NONE,100 Block of KISKA RD,-122.375989158092,37.7301576924252,16:00:00
2015-05-13,VANDALISM,"MALICIOUS MISCHIEF, VANDALISM OF VEHICLES",Wednesday,NORTHERN,"ARREST, BOOKED",300 Block of MCALLISTER ST,-122.417777932619,37.7803089893403,14:30:00
2015-05-13,NON-CRIMINAL,LOST PROPERTY,Wednesday,TENDERLOIN,NONE,300 Block of OFARRELL ST,-122.41050925879499,37.786043222299206,21:00:00
2015-05-13,LARCENY/THEFT,GRAND THEFT FROM LOCKED AUTO,Wednesday,NORTHERN,NONE,2000 Block of BUSH ST,-122.43101755702699,37.7873880712241,21:00:00
.....
2015-05-13,LARCENY/THEFT,GRAND THEFT FROM LOCKED AUTO,Wednesday,INGLESIDE,NONE,500 Block of COLLEGE AV,-122.42365634294501,37.7325564882065,21:00:00
2015-05-13,LARCENY/THEFT,ATTEMPTED THEFT FROM LOCKED VEHICLE,Wednesday,TARAVAL,NONE,19TH AV / SANTIAGO 

当我获得日期列的频率计数时,我得到2011-01-01 650。换句话说,整个数据集中 2011-01-01 发生了 650 起犯罪事件。但是,我想知道如何返回 2011-01-01 发生的 650 犯罪行为的前 10 个类别(Category 列) 。来自 documentation我读到了有关索引选择和切片的内容。尽管如此,我仍然不知道如何返回此类类别。

最佳答案

我认为这符合您的要求,首先使用 df.Dates == "2011-01-01" 构造一个逻辑索引来过滤日期 2011-01-01< 上的行 并在列索引处指定 Category 以仅选择 Category 列,这样您就可以获得 2011-01-01 上的所有类别。使用value_counts()函数为每个类别制作一个频数表,并按频数排序,默认是升序排列,为了得到出现次数最多的类别,可以使用列表[::-1] 反转索引以反转频率计数,并使用 [:10] 选取前 10 个元素,这将是前 10 个最常见的类别:

df.loc[df.Dates == "2011-01-01", "Category"].value_counts().sort_values()[::-1][:10]

关于python - 如何使用 pandas 返回前 10 个频繁列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38298385/

相关文章:

python - python的python.org安装器是否自带pip,如何使用?

python - 多表密码的 for 循环末尾未打印文本

python - 如何在python中使用urllib一次请求多个url

python-3.x - 在类里面使用 numba?

csv - 如何通过 Pandas 数据框读取包含 utf-8 值的 .csv 文件

Python:绘制使用 `period_range` (pandas) 创建的数据时出错

python - 我需要在哪里放置我的 Django 测试以便它们被执行?

PHPExcel - 将 4 个 CSV 文件读取到一个带有 4 个电子表格的工作簿中

python - 带有 pandas 的 CSV 副本

python - pygame错误,没有设置视频模式