我有一个出租车数据的数据框,有两列,如下所示:
Neighborhood Borough Time
Midtown Manhattan X
Melrose Bronx Y
Grant City Staten Island Z
Midtown Manhattan A
Lincoln Square Manhattan B
基本上,每行代表该行政区附近的出租车。现在,我想在每个行政区找到前5个街区,拥有最多的皮卡。我试过这个:
df['Neighborhood'].groupby(df['Borough']).value_counts()
这给了我这样的东西:
borough
Bronx High Bridge 3424
Mott Haven 2515
Concourse Village 1443
Port Morris 1153
Melrose 492
North Riverdale 463
Eastchester 434
Concourse 395
Fordham 252
Wakefield 214
Kingsbridge 212
Mount Hope 200
Parkchester 191
......
Staten Island Castleton Corners 4
Dongan Hills 4
Eltingville 4
Graniteville 4
Great Kills 4
Castleton 3
Woodrow 1
如何过滤它以便我只获得前5个?我知道有几个问题有类似的标题,但它们对我的情况没有帮助。
答案 0 :(得分:22)
我认为您可以使用nlargest
- 您可以将1
更改为5
:
s = df['Neighborhood'].groupby(df['Borough']).value_counts()
print s
Borough
Bronx Melrose 7
Manhattan Midtown 12
Lincoln Square 2
Staten Island Grant City 11
dtype: int64
print s.groupby(level=[0,1]).nlargest(1)
Bronx Bronx Melrose 7
Manhattan Manhattan Midtown 12
Staten Island Staten Island Grant City 11
dtype: int64
正在创建其他列,指定级别信息
答案 1 :(得分:10)
您可以通过稍微扩展您的原始群组来实现这一目标:' nlargest':
>>> df.groupby(['Borough', 'Neighborhood']).Neighborhood.value_counts().nlargest(5)
Borough Neighborhood Neighborhood
Bronx Melrose Melrose 1
Manhattan Midtown Midtown 1
Manhatten Lincoln Square Lincoln Square 1
Midtown Midtown 1
Staten Island Grant City Grant City 1
dtype: int64
答案 2 :(得分:0)
df ['Neighborhood']。groupby(df ['Borough'])。value_counts()。head(5)
head()获取数据帧中的前5行。
答案 3 :(得分:0)
您也可以尝试下面的代码,仅获取价值计数的前10个值
“国家/地区代码”和“ raised_amount_usd”是列名。
groupby_country_code = master_frame.groupby('country_code') arr = groupby_country_code ['raised_amount_usd']。sum()。sort_index()[0:10] 打印(arr)
[0:10]显示数组中要切片的索引0到10。您可以选择切片选项。
答案 4 :(得分:0)
试试这个(只需将 head() 中的数字更改为您的选择):
# top 3 : total counts of 'Neighborhood' in each Borough
Z = df.groupby('Borough')['Neighborhood'].value_counts().groupby(level=0).head(3).sort_values(ascending=False).to_frame('counts').reset_index()
Z
答案 5 :(得分:0)
df.groupby(['Borough']).Neighborhood.value_counts().groupby(level=0, group_keys=False).head(5)
.value_counts().nlargest(5)
只给你一组前 5 名group_keys=False
避免重复索引value_counts()
已经排序,只需要head(5)