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