【问题标题】:Removing one-hot encoded columns if all 0如果全为 0,则删除 one-hot 编码列
【发布时间】:2021-04-01 22:18:25
【问题描述】:

我有以下数据框df,它有一堆观察结果,它们有一堆可以属于的类别以及它们是否获胜。我对一些行进行了子集化,因此实际上有更多类别。我想创建一个新的数据框,在其中删除与任何观察不对应的任何类别列(任何前缀为 cat_ 的列)(即整个类别列为 0)。

id cat_food    cat_fitness   cat_retail    cat_grocery  win
1  1           0             1             0            1
2  1           0             0             0            0
3  0           1             0             0            1
4  1           0             0             0            1
4  1           0             0             0            0
5  1           0             0             0            1
6  0           1             1             0            1
6  0           1             1             0            0

我预期的数据框将删除 cat_grocery 列,因为没有任何观察属于该类别

id cat_food    cat_fitness   cat_retail      win
1  1           0             1               1
2  1           0             0               0
3  0           1             0               1
4  1           0             0               1
4  1           0             0               0
5  1           0             0               1
6  0           1             1               1
6  0           1             1               0

【问题讨论】:

标签: python pandas


【解决方案1】:

根据您的评论: 我删除了与任何观察不对应的任何类别列(任何带有前缀 cat_ 的列)(即整个类别列为 0),您可以链接条件以检查总和是否为 0如果列有前缀 cat_ 使用 str.startswith ,然后将其与 loc 一起使用:

df.loc[:,~(df.sum().eq(0) & df.columns.str.startswith("cat_"))]

   id  cat_food  cat_fitness  cat_retail  win
0   1         1            0           1    1
1   2         1            0           0    0
2   3         0            1           0    1
3   4         1            0           0    1
4   4         1            0           0    0
5   5         1            0           0    1
6   6         0            1           1    1
7   6         0            1           1    0

【讨论】:

    猜你喜欢
    • 2021-04-14
    • 2018-03-29
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2018-01-29
    • 2017-10-23
    • 2017-10-10
    • 2017-06-21
    相关资源
    最近更新 更多