如果数据框中某列的唯一值数量大于一个给定值,则更改该列的值。

5
IP Routing Banking
1  1        6
2  1        6
3  1        7
3  3        8
4  5        9
5  9        7

对于每列,如果同一个值出现了两次或更多次,我想将其改为“Other”。在pandas python中如何实现?
期望输出:
IP       Routing      Banking
1        Other        Other
2        Other        Other
Other    Other        Other
Other    3            8
4        5            9
5        9            Other
1个回答

5
df[df.transform(lambda col: col.duplicated(keep=False))] = 'Other'

结果:

      IP Routing Banking
0      1   Other   Other
1      2   Other   Other
2  Other   Other   Other
3  Other       3       8
4      4       5       9
5      5       9   Other

与上文相同的思路,但没有使用lambda调用 :
cond = df.transform(pd.Series.duplicated, keep=False)
df.mask(cond, 'Other')

使用任何阈值:

您可以设置任何必须达到的值计数阈值,以便进行替换 - 不仅限于2(使用此答案中的方法):

n = 3  # set this threshold

def to_replace(ser, n):
    counts = ser.value_counts()
    return ser.isin(counts[counts >= n].index)

df.mask(df.transform(to_replace, n=n), 'Other')


   IP Routing  Banking
0   1   Other        6
1   2   Other        6
2   3   Other        7
3   3       3        8
4   4       5        9
5   5       9        7

1
@sammywemmy,太棒了!df.mask默认情况下返回一个新的数据框,原始数据框不会被修改(并且它有参数inplace)。 - Vladimir Fokow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接