【问题标题】:Create column based on a defined list if other column contains string如果其他列包含字符串,则基于定义的列表创建列
【发布时间】:2020-06-24 04:37:24
【问题描述】:

抱歉标题含糊...

我有一个预定义的列表

list = ['ABC', 'DEF', 'GHI', 'JKL']

我有下表

Item#      Value
  1        'DEF-1234'
  2        'some_text_ABC'
  3        'GHI_1"
  4        'Item is: ABC'
  5        '7713-23-88'
  6        'ABC'

我想根据“值”列提取以下键

Item#      Value              Key
  1        'DEF-1234'         'DEF'
  2        'some_text_ABC'    'ABC'
  3        'GHI_1"            'GHI'
  4        'Item is: ABC'     'ABC'
  5        '7713-23-88'        NA
  6        'ABC'              'ABC'

我正在考虑某种 elif 循环,但我怀疑 Pandas 有一些袖手旁观

非常感谢您

【问题讨论】:

    标签: python python-3.x pandas list


    【解决方案1】:

    你可以做一个str.extract:

    df['Key'] = df['Value'].str.extract(fr'({"|".join(lst)})')[0]
    

    输出:

       Item#            Value  Key
    0      1       'DEF-1234'  DEF
    1      2  'some_text_ABC'  ABC
    2      3          'GHI_1"  GHI
    3      4   'Item is: ABC'  ABC
    4      5     '7713-23-88'  NaN
    5      6            'ABC'  ABC
    

    【讨论】:

      【解决方案2】:

      您可以定义一个扫描所有键的函数,然后使用 apply() 创建新列。

      li = ['ABC', 'DEF', 'GHI', 'JKL']
      
      def check_key(st):
          keys = [el for el in li if el in st]
          return  keys[0] if keys else 'NA'
      
      df['key'] = df['Value'].apply(check_key)
      

      输出:

                 Value  key
      0       DEF-1234  DEF
      1  some_text_ABC  ABC
      2          GHI_1  GHI
      3   Item is: ABC  ABC
      4     7713-23-88   NA
      5            ABC  ABC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-30
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-03
        相关资源
        最近更新 更多