我有一个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()
会返回一个系列。
我该怎么做?
谢谢!
答案 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']]