【问题标题】:How do I create one column based on the names of multiple other columns in python?如何根据 python 中多个其他列的名称创建一列?
【发布时间】:2018-01-16 16:54:25
【问题描述】:

假设我有以下数据框:

ID   Brick    Vinyl     Stone
1    Yes      No         No
2    No       Yes        No
3    No       No         Yes
4    Yes      Yes        No
5    No       No         No

如何根据这些列的名称创建一个新列,以便最终得到以下结果?

ID   Brick    Vinyl     Stone    Type
1    Yes      No         No      Brick
2    No       Yes        No      Vinyl
3    No       No         Yes     Stone
4    Yes      Yes        No      Multiple
5    No       No         No      Other

请注意,对于多个列,ID 4 和 5 要么是“是”,要么都是“否”。我在“类型”中为这两个条目记录的响应不一定是“多个”或“其他”——如果有记录所需信息的默认方式同样有效。谢谢!

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    你可以的

    In [146]: s = df[['Brick', 'Vinyl', 'Stone']].eq('Yes')
    
    In [147]: sm = s.sum(1)
    
    In [148]: df['Type'] = np.where(sm.eq(0), 'Other', 
                                    np.where(sm.eq(2), 'Multiple', s.idxmax(1)))
    
    In [149]: df
    Out[149]:
       ID Brick Vinyl Stone      Type
    0   1   Yes    No    No     Brick
    1   2    No   Yes    No     Vinyl
    2   3    No    No   Yes     Stone
    3   4   Yes   Yes    No  Multiple
    4   5    No    No    No     Other
    

    【讨论】:

    • 非常感谢,太完美了!一个问题 - 你能澄清一下 '.idxmax(1)' 到底是做什么的吗?读取该行似乎总和为 1,它会打印列的名称,但我不确定如何
    • 来自docs for idxmax():“返回请求轴上第一次出现最大值的索引”。 1 指的是 axis 参数 - 在这种情况下,它表示按列。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多