为了账号安全,请及时绑定邮箱和手机立即绑定

Pandas - 根据 value_counts() 结果重新编码变量

Pandas - 根据 value_counts() 结果重新编码变量

眼眸繁星 2023-08-08 16:16:21
这是我的数据框:df = pd.DataFrame({'col1': [1, 1, 1, 2, 2, 3, 4],                     'col2': [1, 3, 2, 4, 6, 5, 7]})我尝试根据值在数据集中出现的频率来重新编码,在这里我想将仅出现一次的每个值重新标记为“其他”。这是所需的输出:#desired" col1": [1,1,1,2,2,"other", "other"]我尝试了这个但没有成功:df["recoded"] = np.where(df["col1"].value_counts() > 1, df["col1"], "other")我的想法是保存值计数并过滤它们,然后循环结果数组,但这似乎过于复杂。有没有一种简单的“pythonic/pandas”方法来实现这个?
查看完整描述

1 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

您很接近 - 需要Series.map与原始系列相同长度的系列DataFrame

df["recoded"] = np.where(df["col1"].map(df["col1"].value_counts()) > 1, df["col1"], "other")

GroupBy.transform或者通过以下方式与计数值一起使用GroupBy.size

df["recoded"] = np.where(df.groupby('col1')["col1"].transform('size') > 1, 
                         df["col1"], 
                         "other")

如果需要检查重复项,请使用Series.duplicatedwithkeep=False来返回所有重复项的掩码:

df["recoded"] = np.where(df["col1"].duplicated(keep=False), df["col1"], "other")

print (df)

0     1     1       1

1     1     3       1

2     1     2       1

3     2     4       2

4     2     6       2

5     3     5   other

6     4     7   other


查看完整回答
反对 回复 2023-08-08
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信