我有一个包含2列的pandas数据框(下面的代码段).我正在尝试使用City列来推断Borough(您会注意到一些需要替换的Unspecified值).要做到这一点,我试图为每个城市显示最高的自治市镇并输出到一个字典,其中关键是城市,价值将是该城市最高的自治市镇.
City Borough
Brooklyn Brooklyn
Astoria Queens
Astoria Unspecified
Ridgewood Unspecified
Ridgewood Queens
Run Code Online (Sandbox Code Playgroud)
因此,如果发现里奇伍德与皇后队100次配对,布鲁克林4次与曼哈顿1次配对,那么这对将是里奇伍德:皇后区.
到目前为止,我已经尝试过这段代码:
specified = data[['Borough','City']][data['Borough']!= 'Unspecified']
paired = specified.Borough.groupby(specified.City).max()
Run Code Online (Sandbox Code Playgroud)
乍一看,这似乎是正确的输出,但仔细检查后,输出完全不正确.有任何想法吗?
编辑:
试过下面的建议: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
Run Code Online (Sandbox Code Playgroud)
当然我可以手动替换截断的单词,但我很想知道原因是什么?
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
Run Code Online (Sandbox Code Playgroud)
我相信这样做会:
from scipy import stats
d.groupby('City').agg(lambda x: stats.mode(x['Borough'])[0])
Run Code Online (Sandbox Code Playgroud)
这为您提供了一个DataFrame,其中City作为索引,也是Borough列中最常用的自治市镇:
>>> 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
Run Code Online (Sandbox Code Playgroud)
(如果你没有安装scipy,你必须制作自己的"模式"功能,我想你可以使用它collections.Counter
.但是如果你使用熊猫,那么你也可以选择Scipy.)