【问题标题】:Pandas one-hot encoding with multiple like columns具有多个类似列的 Pandas one-hot 编码
【发布时间】:2019-10-27 16:00:53
【问题描述】:

我在数据集中有几个“条件”列。这些列都有资格接收相同的编码输入。这只是为了允许将多个条件与单个记录相关联 - 代码结束的列没有任何意义。

在下面的示例中,3 个条件列中只有 5 个唯一值,但如果您分别考虑每一列,则每个列中都有 3 个唯一值。因此,当我将 one-hot 编码一起应用于这些变量时,我得到 9 个新列,但我只想要 5 个(一个用于一组列中的每个唯一值)。

这是原始数据的示例:

| cond1 | cond2 | cond3 | target |
|-------|-------|-------|--------|
| I219  | E119  | I48   | 1      |
| I500  |       |       | 0      |
| I48   | I500  | F171  | 1      |
| I219  | E119  | I500  | 0      |
| I219  | I48   |       | 0      |

这是我尝试过的:

import pandas as pd
df = pd.read_csv('micro.csv', dtype='object')
df['cond1'] = pd.Categorical(df['cond1'])
df['cond2'] = pd.Categorical(df['cond2'])
df['cond3'] = pd.Categorical(df['cond3'])

dummies = pd.get_dummies(df[['cond1', 'cond2', 'cond3']], prefix = 'cond')
dummies

这给了我:

| cond_I219 | cond_I48 | cond_I500 | cond_E119 | cond_I48 | cond_I500 | cond_F171 | cond_I48 | cond_I500 |
|-----------|----------|-----------|-----------|----------|-----------|-----------|----------|-----------|
| 1         | 0        | 0         | 1         | 0        | 0         | 0         | 1        | 0         |
| 0         | 0        | 1         | 0         | 0        | 0         | 0         | 0        | 0         |
| 0         | 1        | 0         | 0         | 0        | 1         | 1         | 0        | 0         |
| 1         | 0        | 0         | 1         | 0        | 0         | 0         | 0        | 1         |
| 1         | 0        | 0         | 0         | 1        | 0         | 0         | 0        | 0         |

因此,对于出现在多个列(I48 和 I500)中的任何代码,我都有多个编码列。我只希望每个列都有一个列,这样我就可以检查各个代码与我的目标变量之间的相关性。

有没有办法做到这一点?这是我追求的结果:

| cond_I219 | cond_I48 | cond_I500 | cond_E119 | cond_F171 |
|-----------|----------|-----------|-----------|-----------|
| 1         | 1        | 0         | 1         | 0         |
| 0         | 0        | 1         | 0         | 0         |
| 0         | 1        | 1         | 0         | 1         |
| 1         | 0        | 1         | 1         | 0         |
| 1         | 1        | 0         | 0         | 0         |

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    如果需要 10 输出数据,请获取 max 值:

    dfDummies = dummies.max(axis=1, level=0)
    

    如果需要计数1 值,则使用sum

    dfDummies = dummies.sum(axis=1, level=0)
    

    【讨论】:

    • 谢谢你,效果很好!尽管我认为您的意思是在右侧使用“傻瓜”:dfDummies = dummies.max(axis=1, level=0)
    猜你喜欢
    • 2019-09-07
    • 2019-10-11
    • 1970-01-01
    • 2018-03-29
    • 2017-06-21
    • 2016-11-15
    • 2023-01-16
    • 2018-07-10
    • 2022-01-10
    相关资源
    最近更新 更多