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