【问题标题】:Python Data frame: If Column Name is contained in the String Row of Another Column Then 1 Otherwise 0Python数据框:如果列名包含在另一列的字符串行中,则为1,否则为0
【发布时间】:2018-05-22 02:53:18
【问题描述】:
Column A          2C GAD D2 6F  ABCDE
2C 1B D2 6F ABC   1   0  1  1   0
2C 1248 Bulers    1   0  0  0   0

上面是我要创建的数据框。

第一行代表字段名称。我想采用的逻辑如下: 如果列名在“A 列”行中,则为 1,否则为 0

我已经在 Google 上搜索,寻找代码来回答与我类似的问题,以便我可以对其进行测试并反向工程解决方案。不幸的是,我找不到任何东西。

否则我会发布一些我试图解决这个问题的代码,但我真的不知道。

【问题讨论】:

    标签: python string pandas dataframe contains


    【解决方案1】:

    您可以使用列表推导根据列和行创建所需数据:

    In [39]: row =['2C 1B D2 6F ABC', '2C 1248 Bulers']
    
    In [40]: columns=['2C', 'GAD', 'D2', '6F',  'ABCDE']
    
    In [41]: df = pd.DataFrame([[int(k in r) for k in columns] for r in row], index = ['2C 1B D2 6F ABC','2C 1248 Bulers'], columns=['2C', 'GAD', 'D2', '6F',  'ABCDE'])
    
    In [42]: df
    Out[42]: 
                     2C  GAD  D2  6F  ABCDE
    2C 1B D2 6F ABC   1    0   1   1      0
    2C 1248 Bulers    1    0   0   0      0
    

    如果你想要一个纯粹的 Pandas 方法,你可以使用 pd.Series() 而不是 list 来保留列和行,然后使用 Series.applySeries.str.contains 来获得期望的结果:

    In [73]: data = columns.apply(row.str.contains).astype(int).transpose()
    
    In [74]: df = pd.DataFrame(data.values, index = ['2C 1B D2 6F ABC','2C 1248 Bulers'], columns=['2C', 'GAD', 'D2', '6F',  'ABCDE'])
    
    In [75]: df
    Out[75]: 
                     2C  GAD  D2  6F  ABCDE
    2C 1B D2 6F ABC   1    0   1   1      0
    2C 1248 Bulers    1    0   0   0      0
    

    【讨论】:

    • 抱歉,我问的问题有点错误...我已经有一个带有“A 列”的数据框...如何从“A 列”创建 1 和 0 列?
    猜你喜欢
    • 1970-01-01
    • 2020-05-22
    • 2016-12-01
    • 2020-08-06
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多