Python数据框:如果列名包含在另一列的字符串行中,则为1,否则为0

时间:2017-12-07 22:00:05

标签: python string pandas dataframe contains

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

我已经搜索了谷歌寻找代码回答类似我的问题所以我可以测试它并向后设计一个解决方案。不幸的是,我找不到任何东西。

否则我会发布一些我尝试解决这个问题的代码,但实际上我没有任何线索。

1 个答案:

答案 0 :(得分:0)

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

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