【问题标题】:Multiple conditional statement on a column列上的多个条件语句
【发布时间】:2019-07-22 03:14:26
【问题描述】:

我想要一个专栏"PRI/TEN"

  1. 当 PRIMARY RESOURCE 列包含 "BERIX"PRI/TEN 应该 有"TBC"
  2. 当列 PRIMARY RESOURCE 包含"BERIXTVX"PRI/TEN 应该有 "TEN"
  3. 当列 PRIMARY RESOURCE 包含 "BERIXVX"PRI/TEN 应该有 "PRI"

我试过了:

data1['PRI/ TEN'] = np.where(data1['First']!='BERIXVX', 'PRI','TEN')

这是我原来的专栏

Primary Resource
BERIX_MYANMAR ONLY
BERIXTVX_BOOST IPV
BERIXTVX_BOOST IPV
BERIXVX_ENCEPUR A AD
BERIXVX_ENCEPUR AD
BERIXTVX_BOOST IPV
BERIXTVX_BEXSERO

这就是我想要的

Primary Resource    PRI/TEN
BERIX_MYANMAR ONLY  TBC
BERIXTVX_BOOST IPV  TEN
BERIXTVX_BOOST IPV  TEN
BERIXVX_ENCEPUR A AD    PRI
BERIXVX_ENCEPUR AD  PRI
BERIXTVX_BOOST IPV  TEN
BERIXTVX_BEXSERO    TEN

【问题讨论】:

    标签: python pandas dataframe pandas-groupby


    【解决方案1】:

    试试这个:

    def categorizer(row):
        if 'BERIXTVX' in row:
            return 'TEN'
        elif 'BERIXVX' in row:
            return 'PRI'
        elif 'BERIX' in row:
            return 'TBC'
    
        # Return a default value
        return None
    
    
    data1['PRI/TEN'] = data1['PRIMARY RESOURCE'].apply(categorizer)
    

    这会将函数categorizer 应用于PRIMARY RESOURCE 列中的每一行。虽然它不是矢量化的,所以如果遇到性能问题,请告诉我。

    【讨论】:

      【解决方案2】:

      np.selectstr.contains 一起使用:

      m1 = df['Primary Resource'].str.contains('BERIX_')
      m2 = df['Primary Resource'].str.contains('BERIXTVX_')
      m3 = df['Primary Resource'].str.contains('BERIXVX_')
      
      df['PRI/TEN'] = np.select([m1, m2, m3], ['TBC', 'TEN', 'PRI'])
      
      print(df)
             Primary Resource PRI/TEN
      0    BERIX_MYANMAR ONLY     TBC
      1    BERIXTVX_BOOST IPV     TEN
      2    BERIXTVX_BOOST IPV     TEN
      3  BERIXVX_ENCEPUR A AD     PRI
      4    BERIXVX_ENCEPUR AD     PRI
      5    BERIXTVX_BOOST IPV     TEN
      6      BERIXTVX_BEXSERO     TEN
      

      【讨论】:

        【解决方案3】:

        感谢大家的回答。我在互联网上得到了这个,它正在执行任务。

        这只是普通的where函数,带有多个嵌套的where子句。

        data1['Private/Tender'] = np.where(data1['First']=='BERIXVX','PRI', (np.where(data1['First']=='BERIXTVX','TEN','TBC')))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-03
          • 2019-02-18
          • 1970-01-01
          • 1970-01-01
          • 2013-12-17
          • 1970-01-01
          • 1970-01-01
          • 2015-01-20
          相关资源
          最近更新 更多