列上的多个条件语句

2024-06-01 04:57:15 发布

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

我想要一列"PRI/TEN"

  1. 当列主资源包含"BERIX"时,PRI/TEN应该 有"TBC"
  2. 当列主资源包含"BERIXTVX"时, PRI/TEN应该有"TEN"
  3. 当列主资源包含 "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

Tags: 资源resourceadprimyanmarboostprimarydata1
3条回答

^{}^{}一起使用:

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

谢谢你们的回答。我在网上找到了这个,它正在完成任务

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

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

试试这个:

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)

这将对PRIMARY RESOURCE列中的每一行应用函数categorizer。它没有矢量化,所以如果你有性能问题,请告诉我

相关问题 更多 >