Contra111
Contra111

Reputation: 327

Edit value in pandas dataframe based on other column value

Here an example:

df = pd.DataFrame({
'file':['filename1','filename2','filename3','filename4','filename5'],
'prop1':['True','False','False','True','False'],
'prop2':['False','True','False','False','True'],
'prop3':['False','False','True','False','False']
})
        file  prop1  prop2    prop3
0  filename1   True  False    False
1  filename2  False   True    False
2  filename3  False  False     True
3  filename4   True  False    False
4  filename5  False   True    False

I need to edit "file" based on prop1, prop2, prop3 value like this:

           file
filename1:prop1
filename2:prop2
filename3:prop3
filename4:prop1
filename5:prop2

Upvotes: 2

Views: 76

Answers (2)

ansev
ansev

Reputation: 30920

if the values ​​are str type you should use better bool type since you are using more memory unnecessarily

you can use eval to convert to bool and a for loop + mask to check:

for key in df.columns[1:]: 
    df[key]=df[key].apply(lambda x:eval(x))
    df['file'].mask(df[key],df['file']+':'+ key,inplace=True)
print(df)

              file  prop1  prop2  prop3
0  filename1:prop1   True  False  False
1  filename2:prop2  False   True  False
2  filename3:prop3  False  False   True
3  filename4:prop1   True  False  False
4  filename5:prop2  False   True  False

print(df['prop1'])

0     True
1    False
2    False
3     True
4    False
Name: prop1, dtype: bool

Upvotes: 1

rafaelc
rafaelc

Reputation: 59274

Use idxmax through axis=1

df['file'] = df.file + ':' + df.filter(like='prop').idxmax(1)

             file
0  filename1:prop1
1  filename2:prop2
2  filename3:prop3
3  filename4:prop1
4  filename5:prop2

Upvotes: 1

Related Questions