Python 根据出现的最高值对数据帧进行分组
我有一个包含两列的熊猫数据框架(下面的代码片段)。我试图使用City列来推断自治区(您会注意到一些未指定的值需要替换)。为此,我尝试为每个城市显示出现频率最高的自治区,并输出到字典,其中键为城市,值为该城市出现频率最高的自治区Python 根据出现的最高值对数据帧进行分组,python,pandas,Python,Pandas,我有一个包含两列的熊猫数据框架(下面的代码片段)。我试图使用City列来推断自治区(您会注意到一些未指定的值需要替换)。为此,我尝试为每个城市显示出现频率最高的自治区,并输出到字典,其中键为城市,值为该城市出现频率最高的自治区 City Borough Brooklyn Brooklyn Astoria Queens Astoria Unspecified Ridgewood Unspecified Ridgewood Queens 因此,如果里奇
City Borough
Brooklyn Brooklyn
Astoria Queens
Astoria Unspecified
Ridgewood Unspecified
Ridgewood Queens
因此,如果里奇伍德被发现与皇后区配对100次,布鲁克林4次,曼哈顿1次,那么这对搭档就是里奇伍德:皇后区
到目前为止,我已经尝试了以下代码:
specified = data[['Borough','City']][data['Borough']!= 'Unspecified']
paired = specified.Borough.groupby(specified.City).max()
乍一看,这似乎是正确的输出,但仔细检查后,输出根本不正确。有什么想法吗
编辑:
尝试以下建议:
paired=specified.groupby('City').agg(lambda x:stats.mode(x['Borough'])[0])
我注意到一些行政区被截断,如下所示:
paired.Borough.value_counts()
#[Out]# QUEENS 58
#[Out]# MANHATTAN 7
#[Out]# STATEN ISLAND 4
#[Out]# BRONX 4
#[Out]# BROOKLYN 3
#[Out]# MANHATTA 2
#[Out]# STATE 1
#[Out]# QUEEN 1
#[Out]# MANHA 1
#[Out]# BROOK 1
当然,我可以手动替换被截断的单词,但我很想知道原因是什么
PS-以下是DF指定FYI的输出:
specified
#[Out]# <class 'pandas.core.frame.DataFrame'>
#[Out]# Int64Index: 719644 entries, 1 to 396225
#[Out]# Data columns:
#[Out]# Borough 719644 non-null values
#[Out]# City 651617 non-null values
#[Out]# dtypes: object(2)
specified.Borough.value_counts()
#[Out]# QUEENS 215382
#[Out]# BROOKLYN 208565
#[Out]# MANHATTAN 150016
#[Out]# BRONX 94648
#[Out]# STATEN ISLAND 51033
指定
#[Out]#
#[Out]#int64索引:719644个条目,1到396225
#[Out]#数据列:
#[Out]#自治区719644非空值
#[输出]#城市651617非空值
#[Out]#数据类型:对象(2)
指定的.Borough.value_计数()
#[外]#皇后区215382
#[外]#布鲁克林208565
#[Out]#曼哈顿150016
#[Out]#布朗克斯94648
#[Out]#斯塔顿岛51033
我相信这可以做到:
from scipy import stats
d.groupby('City').agg(lambda x: stats.mode(x['Borough'])[0])
这将为您提供一个数据框架,其中城市作为索引,并且是“自治区”列中最常见的自治区:
>>> d
City Borough
0 Brooklyn Brooklyn
1 Astoria Queens
2 Astoria Queens
3 Astoria Brooklyn
4 Astoria Unspecified
5 Ridgewood Unspecified
6 Ridgewood Queens
7 Ridgewood Queens
8 Ridgewood Brooklyn
9 Ridgewood Brooklyn
10 Ridgewood Brooklyn
>>> d.groupby('City').agg(lambda x: stats.mode(x['Borough'])[0])
Borough
City
Astoria Queens
Brooklyn Brooklyn
Ridgewood Brooklyn
(如果你没有安装scipy,你必须创建自己的“模式”功能,我想你可以使用
集合。计数器。但是如果你使用pandas,你最好也安装scipy。)这给了我一个断言errornevermind,我是在你帮我写的另一篇文章中的“指定”场景中做的,它似乎起了作用……奇怪的是,《曼哈顿》似乎在某些地方被截断了:#[Out]#长岛市皇后区#[Out]#曼哈顿曼哈顿曼哈顿#[Out]#曼哈顿曼哈顿曼哈顿曼哈顿#[Out]#马斯佩斯皇后区、孟菲斯皇后区、中村皇后区、曼哈顿区、纽约市曼哈顿区#纽约MANHATTAN@ChrisArmstrong这对我来说似乎很好…也许是iPython的印刷问题?今晚我会再检查一遍…max
按字典顺序找到了最大的。啊,这就解释了奇怪的结果。。。