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

2024-05-19 18:42:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,其中一列中有以下值:

在:

df.line.unique()

输出:

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

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

if (df.line.str.contains("Line70")  or (df.line.str.contains("Line71") or (df.line.str.contains("Line79")):
   return 1
else:
   return 0

因此,如果df.line中的值包含“Line70”、“Line71”、“Line79”,则新列box_type中的值应为1,其余应为0

我试着用这个代码:

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'

我试着在xcontains之间添加.str,就像x.str.contains(),但这也给出了一个错误。你知道吗

我该怎么做?你知道吗

谢谢!你知道吗


Tags: orboxdfreturnifobjecttype错误
1条回答
网友
1楼 · 发布于 2024-05-19 18:42:02

怎么样:

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

相关问题 更多 >