python - 如何在 pandas 数据框中保留分类变量的某些级别并将剩余设置为 "other"

标签 python python-2.7 python-3.x pandas dataframe

我有两个数据框 d1 和 d2,它们都具有相同的分类变量。但是,特定变量的类别可能不同。

例如,对于数据框 d1 中的变量 v1,我们有以下类别或级别:“a”、“b”、“c”、“d”、 “e” 对于相同的变量 v1,在数据框 d2 中我们有级别:“a”、“b”、“c”

然后我想在数据帧 d1 中转换 v1,以便仅保留与 d2 相同的级别,其余级别重新标记为“其他”,即 d1[“v1”] 应转换为:“a”, “b”,“c”,“其他”,“其他”

两个数据框都有超过 400 万个观测值,因此我正在寻找一种快速方法来做到这一点。

示例如下:

d1 = pd.DataFrame({"id": range(1, 11), "v1": ["a", "b", "c", "d", "e", "a", "e", "d", "a", "d"]})
d2 = pd.DataFrame({"id": range(1, 11), "v1": ["a", "b", "c", "a", "c", "b", "c", "a", "b", "a"]})
d1
   id v1
0   1  a
1   2  b
2   3  c
3   4  d
4   5  e
5   6  a
6   7  e
7   8  d
8   9  a
9  10  d

[10 rows x 2 columns]

d2
   id v1
0   1  a
1   2  b
2   3  c
3   4  a
4   5  c
5   6  b
6   7  c
7   8  a
8   9  b
9  10  a

[10 rows x 2 columns]

转换后,新的 d1 应如下所示:

d1
    id     v1
0   1      a
1   2      b
2   3      c
3   4  other
4   5  other
5   6      a
6   7  other
7   8  other
8   9      a
9  10  other

[10 rows x 2 columns]

最佳答案

怎么样

d1.ix[~d1.v1.isin(d2.v1.unique()), 'v1'] = 'other'

编辑经过深思熟虑,解释一下也不错。 :)

  • d2.v1.unique() - 在 d2.v1 中选择唯一值
  • d1.v1.isin() - 在d1.v1中查找这些值
  • d1.ix[~..., 'v1'] - 反转,选择匹配条件的行并更改这些行上的 v1

编辑 2 抱歉,我原来的答案将 d1 中的两行更改为 other。已更新。

关于python - 如何在 pandas 数据框中保留分类变量的某些级别并将剩余设置为 "other",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27515532/

相关文章:

Python - 我如何保存 itertools.product 循环并从它停止的地方恢复

python - 如何使用 python grep 大文件中两个模式之间的行

python - 如何从 Python 类中查找属性名称

python-3.x - TensorFlow:dataset.train.next_batch 是如何定义的?

python-3.x - 用python进行图像膨胀

python - 如何通过函数按 ASCII 降序对单个字符串输出进行排序?

python - 如何使用数据透视表 Python 创建重复行

python - 如何从Python中的json文本解析类对象列表?

python - 使用 scikit-learn 了解分类报告中的 UndefinedMetricWarning?

python-3.x - 雅虎财经 ValueError : zero-size array to reduction operation maximum which has no identity