基于另一个列的多个值创建新列

时间:2019-07-09 20:26:10

标签: python pandas

我有一个数据框,其中的一列中包含这些值:

在:

ssh

出局:

df.line.unique()

我想根据值字符串是否包含LineXX创建一个包含2个值的新列,如下所示:

array(['Line71A', 'Line71B', 'Line75B', 'Line79A', 'Line79B', 'Line75A', 'Line74A', 'Line74B',
       'Line70A', 'Line70B', 'Line58B', 'Line70', 'Line71', 'Line74', 'Line75', 'Line79', 'Line58'],
      dtype=object)

因此,如果if (df.line.str.contains("Line70") or (df.line.str.contains("Line71") or (df.line.str.contains("Line79")): return 1 else: return 0 中的值包含“ Line70”,“ Line71”,“ Line79”,则新列box_type中的值应为1

我尝试使用以下代码执行此操作:

df.line

但是我得到这个错误:

df['box_type'] = df.line.apply(lambda x: 1 if x.contains('Line70') or x.contains('Line71') or x.contains('Line79') else 0)

然后我尝试在AttributeError: 'str' object has no attribute 'contains' .str之间添加x,就像contains一样,但这也导致了错误。

我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:1)

怎么样:

df['box_type'] = df.line.str.contains('70|71|79')

样本数据:

np.random.seed(1)
df = pd.DataFrame({'line':np.random.choice(a, 10)})

输出:

      line  box_type
0  Line75A     False
1   Line70      True
2   Line71      True
3  Line70A      True
4  Line70B      True
5   Line70      True
6  Line75A     False
7   Line79      True
8  Line71A      True
9   Line58     False