熊猫:将列中的罕见条目转换为公共值

时间:2018-02-19 23:00:19

标签: python pandas

我有一个Pandas DataFrame df,其中有一个名为LocationNormalized的列。我已经检查了value_counts()每个值出现的频率,并且很少有值出现。

所以我想将这些罕见的值转换为" RARE"。具体来说,如果列中的值少于10次,我想用" RARE"替换它。

我在想这样的事情:

df["LocationNormalized"].apply(lambda x: "RARE" if df.value_counts()[x] < 10 else x)

但我知道df.value_counts()[x]语法不正确,因为value_counts()会返回一个系列。

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

使用groupby + transform代替value_counts,可以更轻松地创建掩码来相应地设置值。

m = df.groupby("LocationNormalized").transform('count').lt(10)
df.loc[m, "LocationNormalized"] = "RARE"

使用Series -

进行演示
s

0    a
1    a
2    a
3    a
4    b
5    b
6    c
7    d
dtype: object

m = s.groupby(s).transform('count').lt(2)  # find objects occurring once
s[m] = 'RARE'

s

0       a
1       a
2       a
3       a
4       b
5       b
6    RARE
7    RARE
dtype: object

答案 1 :(得分:1)

这是使用列表理解的另一种选择,但是我更喜欢cᴏʟᴅsᴘᴇᴇᴅ解决方案。使用带掩码的loc是有效的。

d = df['LocationNormalized'].value_counts() >= 10

df['LocationNormalized'] = [i if d[i] else 'Rare' for i in df['LocationNormalized']]