chippycentra
chippycentra

Reputation: 3432

Add element to rows within a column that are in a list

Hello everyone I would need help in order to add element to rows within a column that are in a list.

So here is an exemple

df

COL1 COL2 
G1   Homo_sapiens_CR_bouvier
G1   Cattus_cattus
G1   Cattus_novegicus
G1   Rattus_norvegicus 
G2   Rattus_suedicus3
G2   Homo_sapiens2_CR_bouvier

and I any value of this list :

liste=['Homo_sapiens','Rattus_suedicus']

is in the COL2, I want to add a tag to it such as :

COL1 COL2 
G1   Homo_sapiens_CR_bouvier_TAG
G1   Cattus_cattus
G1   Cattus_novegicus
G1   Rattus_norvegicus 
G2   Rattus_suedicus3_TAG
G2   Homo_sapiens2_CR_bouvier_TAG

Does someone have an idea please ? (the real dataframe are sometime quite huge).

Upvotes: 0

Views: 21

Answers (1)

jezrael
jezrael

Reputation: 862661

Use Series.str.contains with add TAG in DataFrame.loc:

liste=['Homo_sapiens','Rattus_suedicus']
m = df['COL2'].str.contains('|'.join(liste))
df.loc[m, 'COL2'] += '_TAG' 
#working like
#df.loc[m, 'COL2'] = df.loc[m, 'COL2'] + '_TAG' 
print (df)
  COL1                          COL2
0   G1   Homo_sapiens_CR_bouvier_TAG
1   G1                 Cattus_cattus
2   G1              Cattus_novegicus
3   G1             Rattus_norvegicus
4   G2          Rattus_suedicus3_TAG
5   G2  Homo_sapiens2_CR_bouvier_TAG

Some alternatives:

df['COL2'] = np.where(m, df['COL2'] + '_TAG', df['COL2'])
df['COL2'] = df['COL2'].mask(m, df['COL2'] + '_TAG')

Upvotes: 2

Related Questions