Home > Blockchain >  Replacing column values with with new values - pandas
Replacing column values with with new values - pandas

Time:09-20

I have a column:

df["temp_column"] = ['E300', 'C43 AMG Coupe', 'S63 AMG Coupe', 'C300 Coupe',
       'C300 4Matic Coupe', 'E400', 'S560', 'CLS53 4 Dr Coupe',
       'E53 Coupe', 'E53', 'CLS450 4 Dr Coupe', 'AMG GT63', 'AMG GT53',
       'E350/E400 Coupe', 'E63', 'CLA250', 'AMG GT',
       'E350/E400 4Matic Coupe', 'SL550', 'SLC300', 'SL450', 'SLC43',
       'GLA250', 'GLC300', 'GLC43', 'GLC300 AMG Coupe', 'GLC43 AMG Coupe',
       'GLC350e', 'GLC63', 'GLC63 Coupe', 'GLE350', 'GLE400',
       'GLE43 Coupe', 'G550', 'GLS450', 'GLS550', 'GLS63', 'S560 Coupe',
       'C63 AMG Coupe','GLE63 S Coupe', 'GLE580', 'GLS580', 'CLA35 AMG Coupe',
       'AMG GT43', 'GLB 35', 'GLA35', 'GLS600', 'S580', 'S500']

I have change values in the column in such a way that:#

1. C43 AMG Coupe -> C43C
2. S63 AMG Coupe -> S63C
3. C300 4Matic Coupe -> C300C
4. GLC63 Coupe -> GLC63 Coupe #should not change 
5. CLA35 AMG Coupe -> CLA35C
6. GLC300 AMG Coupe -> GLC300 Coupe 
7. GLC43 AMG Coupe -> GLC43 Coupe 
8 GLE63 S Coupe-> GLE63 Coupe
9. CLS53 4 Dr Coupe -> CLS53C

Is there a way where I can change these without using if else loop? (NOTE: GLE, GLE brands should have Coupe, remaining gets replaces with C)

CodePudding user response:

Use str.replace with a custom function as replacement:

df['new'] = (df['temp_column']
             .str.replace(r'(\w ).*(Coupe)',
                          lambda m: f'{m.group(1)}{" Coupe" if m.group(1)[:3] in ("GLE", "GLC") else "C"}',
                          regex=True)
            )

output:

               temp_column           new
0                     E300          E300
1            C43 AMG Coupe          C43C
2            S63 AMG Coupe          S63C
3               C300 Coupe         C300C
4        C300 4Matic Coupe         C300C
5                     E400          E400
6                     S560          S560
7         CLS53 4 Dr Coupe        CLS53C
8                E53 Coupe          E53C
9                      E53           E53
10       CLS450 4 Dr Coupe       CLS450C
11                AMG GT63      AMG GT63
12                AMG GT53      AMG GT53
...
26         GLC43 AMG Coupe   GLC43 Coupe
27                 GLC350e       GLC350e
28                   GLC63         GLC63
29             GLC63 Coupe   GLC63 Coupe
30                  GLE350        GLE350
31                  GLE400        GLE400
...

CodePudding user response:

You can apply a function to a column to create a new column. So make a function that fulfills your requiremnets and apply that function to the column, like this:

def replace(word):
    rep = {"C43 AMG Coupe" : "C43C",
"S63 AMG Coupe" : "S63C",
"C300 4Matic Coupe" : "C300C",
"GLC63 Coupe" : "GLC63 Coupe",
"CLA35 AMG Coupe" : "CLA35C",
"GLC300 AMG Coupe" : "GLC300 Coupe",
"GLC43 AMG Coupe" : "GLC43 Coupe",
"GLE63 S Coupe" : "GLE63 Coupe",
"CLS53 4 Dr Coupe" : "CLS53C"}
    return rep[word] if word in rep else word

import pandas as pd

a = pd.DataFrame(['E300', 'C43 AMG Coupe', 'S63 AMG Coupe', 'C300 Coupe',
       'C300 4Matic Coupe', 'E400', 'S560', 'CLS53 4 Dr Coupe',
       'E53 Coupe', 'E53', 'CLS450 4 Dr Coupe', 'AMG GT63', 'AMG GT53',
       'E350/E400 Coupe', 'E63', 'CLA250', 'AMG GT',
       'E350/E400 4Matic Coupe', 'SL550', 'SLC300', 'SL450', 'SLC43',
       'GLA250', 'GLC300', 'GLC43', 'GLC300 AMG Coupe', 'GLC43 AMG Coupe',
       'GLC350e', 'GLC63', 'GLC63 Coupe', 'GLE350', 'GLE400',
       'GLE43 Coupe', 'G550', 'GLS450', 'GLS550', 'GLS63', 'S560 Coupe',
       'C63 AMG Coupe','GLE63 S Coupe', 'GLE580', 'GLS580', 'CLA35 AMG Coupe',
       'AMG GT43', 'GLB 35', 'GLA35', 'GLS600', 'S580', 'S500'], columns = ['temp_column'])
       
a['new'] = a['temp_column'].apply(replace)

print(a)

This gives

temp_column                     new
0                     E300                    E300
1            C43 AMG Coupe                    C43C
2            S63 AMG Coupe                    S63C
3               C300 Coupe              C300 Coupe
4        C300 4Matic Coupe                   C300C
5                     E400                    E400
6                     S560                    S560
7         CLS53 4 Dr Coupe                  CLS53C
8                E53 Coupe               E53 Coupe
9                      E53                     E53
10       CLS450 4 Dr Coupe       CLS450 4 Dr Coupe
11                AMG GT63                AMG GT63
12                AMG GT53                AMG GT53
13         E350/E400 Coupe         E350/E400 Coupe
14                     E63                     E63
15                  CLA250                  CLA250
16                  AMG GT                  AMG GT
17  E350/E400 4Matic Coupe  E350/E400 4Matic Coupe
18                   SL550                   SL550
19                  SLC300                  SLC300
20                   SL450                   SL450
21                   SLC43                   SLC43
22                  GLA250                  GLA250
23                  GLC300                  GLC300
24                   GLC43                   GLC43
25        GLC300 AMG Coupe            GLC300 Coupe
26         GLC43 AMG Coupe             GLC43 Coupe
27                 GLC350e                 GLC350e
28                   GLC63                   GLC63
29             GLC63 Coupe             GLC63 Coupe
30                  GLE350                  GLE350
31                  GLE400                  GLE400
32             GLE43 Coupe             GLE43 Coupe
33                    G550                    G550
34                  GLS450                  GLS450
35                  GLS550                  GLS550
36                   GLS63                   GLS63
37              S560 Coupe              S560 Coupe
38           C63 AMG Coupe           C63 AMG Coupe
39           GLE63 S Coupe             GLE63 Coupe
40                  GLE580                  GLE580
41                  GLS580                  GLS580
42         CLA35 AMG Coupe                  CLA35C
43                AMG GT43                AMG GT43
44                  GLB 35                  GLB 35
45                   GLA35                   GLA35
46                  GLS600                  GLS600
47                    S580                    S580
48                    S500                    S500
  • Related