【问题标题】:Python Pandas populate column from partial string matchPython Pandas 从部分字符串匹配中填充列
【发布时间】:2019-06-14 09:36:19
【问题描述】:

我有一个如下所示的数据框,我需要根据列 Program Number 中的部分字符串匹配创建一个新列 Block,其中包含值 12,其中显示为 _block_1或_block_2。我一直在尝试 if 语句和 .str.contains,但无法让它工作。你会怎么做呢?

148 0209-3SP_block_1    ['g76p010060q00250r.0005'   'JEBD0507160 REV A' CHNCIII
149 0209-3SP_block_2    ['g76x.3761z-.500p03067q03067f.05'  'JEBD0507160 REV A' CHNC III
150 0209-5SP_block_1    ['g76p020060q00250r.0005'   'JEBD0507160 REV A' CHNC III
151 0209-5SP_block_2    ['g76x.3767z-.48p03067q03067f.05'   'JEBD0507160 REV A' CHNC III
152 0210-3SP_block_1    ['g76p010060q00250r.0005'   'JEBD0507160 REV A' CHNC III

【问题讨论】:

  • 刚刚尝试了另一种方法:block1 = df['Machine'].str.contains('_block_1') df['Block'] = block1.replace((True,False), ('1','2')),但这会将所有2 添加到列中
  • https://pandas.pydata.org/pandas-docs/stable/text.html,特别是正则表达式部分。
  • 感谢您的链接,这实际上是我在最后一次尝试中一直使用的,测试匹配或包含模式的字符串部分

标签: python string pandas


【解决方案1】:

您可以使用where 中的numpy 方法:

import numpy as np

df['Block'] = np.where(
    df['Machine'].str.contains('_block_1'),1,
    np.where(df['Machine'].str.contains('_block_2'),2,0)
)

否则,假设所有字符串的长度相同:

df['Block'] = df['Machine'].str[15:].astype(int)

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    • 2020-08-31
    • 2013-06-04
    相关资源
    最近更新 更多