Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Python: Conditional Row Values From a New Column Using dictionary, function, and lambda

I have a dataframe:

id
id1
id2
id3
id8
id9

I want to add a new column new with conditional row values as follows:

If a row from id == id1, then the new row is id1 is cat 1

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

If a row from id == id2, then the new row is id2 is cat 2

If a row from id == id3, then the new row is id3 is cat 3

else, idx is cat 0, where x is the id that is not one of id1, id2, or id3

This is what I tried so far. I think the solution should be to wrap the for loop inside a function and use that function with apply and/or lambda.

import pandas as pd

df = pd.DataFrame({
'id': ['id1', 'id2', 'id3', 'id8', 'id9']
}) 
df

dict = {'id1': '1', 'id2': '2', 'id3': '3'}

for k, val in dict.items():
    if k == "id1" or k == "id2" or k == "id3" in df['state']:
        print(str(k) + " is cat " + str(val))
    else:
        print(str(k) + " is cat 0")

Desired result:

id     new
id1   id1 is cat 1
id2   id2 is cat 2
id3   id3 is cat 3 
id8   id8 is cat 0
id9   id9 is cat 0

>Solution :

You can get number and save in m then use numpy.where and if number m.isin(['1','2','3']) use number of m else use 0.

import numpy as np
m = df['id'].str[2:]
tf = m.isin(['1','2','3'])
df['new'] = np.where(tf, 
                     df['id'] + " is cat " + m , 
                     df['id'] + " is cat 0")
print(df)

Output:

    id           new
0  id1  id1 is cat 1
1  id2  id2 is cat 2
2  id3  id3 is cat 3
3  id8  id8 is cat 0
4  id9  id9 is cat 0
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading