Home > Mobile >  How can I apply multiple conditions in Pandas, with pyton?
How can I apply multiple conditions in Pandas, with pyton?

Time:03-15

How can I apply multiple conditions in pandas? For example I have this dataframe

Country   VAT        
RO       RO1449488
RO       RO1449489
RO       RO1449486
MD       2980409450027

For example I want for the Countries with RO, to delete the "RO" from VAT and remain just number. Or for example if the Country is not RO and let(VAT) is 13, to add "03" in front of VAT

Output to be like

Country   VAT        
RO       1449488
RO       1449489
RO       1449486
MD       032980409450027

I know how to do this with openpyxl, but pandas is new for me and I find pandas syntax to be harder to understand.

CodePudding user response:

You can use boolean selection with numpy.select:

import numpy as np
                       # condition1            condition2
df['VAT'] = np.select([df['Country'].eq('RO'), df['VAT'].str.len().eq(13)],
                       # replacement1      
                      [df['VAT'].str.replace('^RO', '', regex=True),
                      '03' df['VAT']], # replacement2
                       df['VAT']       # default
                     )

output:

  Country              VAT
0      RO          1449488
1      RO          1449489
2      RO          1449486
3      MD  032980409450027

CodePudding user response:

If you want to have somthing else than @mozway one-liner, you can use apply() to make any modification over your DataFrame. Defining your code in a function :

def myFunc(x):
    if x['VAT'].startswith("RO"):
        result = x['VAT'][2:]
    elif x['Country'] != 'RO' and len(x['VAT']) == 13:
        result = "03"   x['VAT']
    # add other conditions here

    return result

Then you can apply it to your DataFrame row by row with axis=1

df['VAT'] = df.apply(myFunc, axis=1)
# Output
  Country              VAT
0      RO          1449488
1      RO          1449489
2      RO          1449486
3      MD  032980409450027
  • Related