【问题标题】:Find if multiple columns contain a string查找多个列是否包含一个字符串
【发布时间】:2021-11-22 09:10:37
【问题描述】:

我有一个包含 ID、值、A、B、C 列的 df。我想检查一个字符串,比如“Type AB”,是否在 A、B、C 列的任何行中。如果它存在,我想在新列“TypeAB_present”中为该行标记它“存在” .我如何在 python 中实现这一点?

【问题讨论】:

    标签: python python-3.x pandas dataframe data-manipulation


    【解决方案1】:

    试试np.whereany

    df['TypeAB _present'] = np.where(df[['A', 'B', 'C']].eq('Type AB').any(axis = 1 ), 'Present', '')
    

    【讨论】:

      【解决方案2】:

      假设您使用的是 pandas,并且您正在从任何列中查找确切的“Type AB”标签。

      df['TypeAB_present'] = df[['A', 'B', 'C']].apply(lambda row: 'Present' if 'Type AB' in row.values else '', axis=1)
      

      【讨论】:

      • 如何指定只查看 A、B 和 C 列
      • @Fazli 查看更新,但是我会推荐其他答案,它更有效
      【解决方案3】:

      你可以试试这个:

      import pandas as pd 
      df = pd.DataFrame(
              {
                      'ID': ['AB01', 'AB02', 'AB02', 'AB01', 'AB01'],
                      'Values': [57, 98, 87, 69, 98],
                      'A': ['Type A', 'Type B', 'Type B', 'Type B', 'Type AB'],
                      'B': [None, 'Type AB', None, 'Type A', None]
              }
      )
      
      df.loc[(df[['A', 'B']] == 'Type AB').any(axis=1), 'C'] = 'Present'
      df
      

      出来

           ID  Values        A        B        C
      0  AB01      57   Type A     None      NaN
      1  AB02      98   Type B  Type AB  Present
      2  AB02      87   Type B     None      NaN
      3  AB01      69   Type B   Type A      NaN
      4  AB01      98  Type AB     None  Present
      

      如果您的检查比完全相等匹配稍微复杂一些,您可以为索引创建更强大的掩码。在这里,我正在检查 A 或 B 列中的任何字符串是否包含子字符串 'AB':

      match_mask = df[['A', 'B']].apply(lambda x: x.str.contains('AB')).any(axis=1)
      df.loc[match_mask, 'C'] = 'Present'
      

      【讨论】:

        猜你喜欢
        • 2014-06-25
        • 2013-03-13
        • 2014-12-27
        • 2018-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-06
        • 1970-01-01
        相关资源
        最近更新 更多