分组熊猫数据框根据最高出现值

2024-09-28 22:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含2列的pandas数据帧(下面的片段)。我尝试使用City列来推断自治区(您会注意到一些未指定的值需要被替换)。为此,我尝试为每个城市显示出现的最高行政区,并将其输出到字典中,其中关键字为城市,值为该城市出现的最高行政区。在

City        Borough

Brooklyn    Brooklyn
Astoria     Queens
Astoria     Unspecified
Ridgewood   Unspecified
Ridgewood   Queens

因此,如果发现里奇伍德与皇后区配对100次,布鲁克林配对4次,曼哈顿配对1次,那么这对就是里奇伍德:皇后区。在

到目前为止,我试过这个代码:

^{pr2}$

乍一看,这似乎是正确的输出,但经过仔细检查,输出根本不正确。有什么想法吗?在

编辑:

尝试以下建议: 配对=指定.groupby('城市').agg(λx:统计模式(x['自治区'])[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

Tags: citypandasvalueout行政区queensboroughcounts
1条回答
网友
1楼 · 发布于 2024-09-28 22:44:22

我相信这样可以做到:

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

这将为您提供一个以城市为索引的数据帧,以及“自治区”列中最常出现的行政区:

^{pr2}$

(如果您没有安装scipy,那么您必须创建自己的“mode”函数,我想您可以使用collections.Counter来实现。但如果你用的是熊猫的话,你肯定也有Scipy。)

相关问题 更多 >