python - Pandas DF 中取消虚拟变量的最有效方法

标签 python pandas dataframe

因此,在下面的屏幕截图中,我们有 3 个不同的能源站点:ID01、ID18 和 ID31。它们采用虚拟变量类型的格式,出于可视化目的,我只想创建一个可以使用的名为“站点”的列。您会看到我快速创建的循环来执行此操作,但它似乎效率非常低。有关如何以最快的方式实现这一目标的任何指示?

Screenshot

最佳答案

设置

data = pd.DataFrame([
    [1, 0, 0],
    [0, 1, 0],
    [0, 0, 1],
    [1, 0, 0],
    [0, 1, 0]
], columns=['ID01', 'ID18', 'ID31']).assign(A=1, B=2)

data

   ID01  ID18  ID31  A  B
0     1     0     0  1  2
1     0     1     0  1  2
2     0     0     1  1  2
3     1     0     0  1  2
4     0     1     0  1  2

dot 与字符串和对象的乘积。

如果这些是真正的虚拟值 01

def undummy(d):
    return d.dot(d.columns)

data.assign(Site=data.filter(regex='^ID').pipe(undummy))

   ID01  ID18  ID31  A  B  Site
0     1     0     0  1  2  ID01
1     0     1     0  1  2  ID18
2     0     0     1  1  2  ID31
3     1     0     0  1  2  ID01
4     0     1     0  1  2  ID18

argmax 切片

这可行,但如果数据与所讨论的不符,可能会产生意外结果。

def undummy(d):
    return d.columns[d.values.argmax(1)]

data.assign(Site=data.filter(regex='^ID').pipe(undummy))

   ID01  ID18  ID31  A  B  Site
0     1     0     0  1  2  ID01
1     0     1     0  1  2  ID18
2     0     0     1  1  2  ID31
3     1     0     0  1  2  ID01
4     0     1     0  1  2  ID18

关于python - Pandas DF 中取消虚拟变量的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50332270/

相关文章:

python - 将 BeautifulSoup 函数应用于 Pandas DataFrame

python - 从 pandas DataFrame 中删除非数字列

python - 从受密码保护的 Excel 文件到 pandas DataFrame

python - gensim LdaMulticore 不是多处理?

Python clickhouse-driver : ValueError: Parameters are expected in dict form

python - 在 python 中打印图形的连接组件

dataframe - 如何从spark(scala)中的不同年、月、日列获取日期

python - 在 pandas DataFrameGroupBy 对象上使用 `rank`

python - pandas drop_duplicates() "keep"参数给出了截然不同的答案 - 它是如何工作的?

r - 数据框到结构化列表