【问题标题】:How to keep certain levels of a categorical variable and set remaining as "other" in pandas data frame如何在熊猫数据框中保留某些级别的分类变量并将剩余设置为“其他”
【发布时间】:2015-02-15 09:47:01
【问题描述】:

我有两个数据框 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]

【问题讨论】:

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


    【解决方案1】:

    怎么样

    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。已更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-21
      • 2021-05-15
      • 2023-03-31
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多