根据最高发生值组合Pandas数据帧

时间:2012-11-19 02:12:10

标签: python pandas

我有一个包含2列的pandas数据框(下面的代码段)。我正在尝试使用City列来推断Borough(您会注意到一些需要替换的Unspecified值)。要做到这一点,我试图为每个城市显示最高的自治市镇并输出到一个字典,其中关键是城市,价值将是该城市最高的自治市镇。

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

1 个答案:

答案 0 :(得分:7)

我相信这样做会:

from scipy import stats
d.groupby('City').agg(lambda x: stats.mode(x['Borough'])[0])

这为您提供了一个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

(如果您没有安装scipy,则必须使用自己的“模式”功能,我猜您可以使用collections.Counter进行操作。但是如果您使用的是熊猫,那么这是一个不错的选择。也有Scipy。)