我有一列:
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']
我以这样的方式更改列中的值:#
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
有没有一种方法可以在不使用if-else循环的情况下更改这些内容?(注意:GLE,GLE品牌应该有Coupe,剩下的用C代替(
使用带有自定义函数的str.replace
作为替换:
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)
)
输出:
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
...
您可以将函数应用于列以创建新列。因此,创建一个满足您需求的函数,并将该函数应用于列,如下所示:
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)
这提供
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