如何在 pandas 中的 get_dummies 中指定要删除的列

How to specify which column to remove in get_dummies in pandas

我有一个包含 3 个值的 DataFrame 列 - Bart、Peg、Human。我需要对它们进行一次性编码,以便 Bart 和 Peg 保留为列,而人类表示为 0 0。

Xi | Architecture
0  | Bart
1  | Bart
2  | Peg
3  | Human
4  | Human
5  | Peg
..
.

我想对它们进行单热编码,以便将人类表示为 0 0:

Xi |Bart| Peg
0  | 1  | 0
1  | 1  | 0
2  | 0  | 1
3  | 0  | 0
4  | 0  | 0
5  | 0  | 1

但是当我这样做的时候:

pd.get_dummies(df['Architecture'], drop_first = True)

它删除了“Bart”并保留了其他 2 个。有没有办法指定要删除的列?

IIUC,尝试使用 get_dummies 然后删除 'Human' 列:

df['Architecture'].str.get_dummies().drop('Human', axis=1)

输出:

   Bart  Peg
0     1    0
1     1    0
2     0    1
3     0    0
4     0    0
5     0    1

你可以mask它:

df = df[['Xi']].join(pd.get_dummies(df['Architecture'].mask(df['Architecture']=='Human')))

输出:

   Xi  Bart  Peg
0   0     1    0
1   1     1    0
2   2     0    1
3   3     0    0
4   4     0    0
5   5     0    1

它正在删除“Bart”,因为这是它看到的“第一个”标签。 get_dummies 没有内置的方式来表示“在之后删除此列”。这很烦人。 所以你可以做一些事情:

  • 在使用 get_dummies 之前对数据集进行排序,以便在您使用 drop first
  • 时首先显示“人类”
  • 将数据集子集化为仅one-hot-encode列(架构=“Bart”或“Peg”)