使用Pandas动态替换在其他列中找到的值

cqoc49vn  于 2022-11-20  发布在  其他
关注(0)|答案(2)|浏览(103)

我有一个数据集,如下所示:
| 汽车|制造商|型号|发动机|
| - -|- -|- -|- -|
| 丰田Rav 4 8 cyl 6L|丰田汽车||8缸6升|
| 三菱日 eclipse 2.1T|三菱|| 2.1T |
| 怪物掘墓人25 Lsc|怪兽||25Lsc|
数据显然是从制造+模型+引擎在某个点上,但汽车模型没有提供给我。
我一直试图用Pandas来说明,如果我们取Car,用nothing替换Make的示例,用nothing替换Engine的示例,然后修剪结果周围的空格,我们将得到Model。
| 汽车|制造商|型号|发动机|
| - -|- -|- -|- -|
| 丰田Rav 4 8 cyl 6L|丰田汽车|第四节|8缸6升|
| 三菱日 eclipse 2.1T|三菱|日 eclipse | 2.1T |
| 怪物掘墓人25 Lsc|怪兽|掘墓人|25Lsc|
当我试图以这种方式引用另一列时,我做错了什么。

df['Model'] = df['Car'].str.replace(df['Make'],'')

给我一个“unhashable type:“系列”“。我猜我不小心输入了整个”制造“列。
在每一行中,我都想用该行中其他列的数据进行不同的替换。我该如何完成呢?

vohkndzv

vohkndzv1#

您可以用途:

df['Model']=df.apply(lambda x: x['Car'].replace(x['Make'],"").replace(x['Engine'],""),axis=1)
print(df)
'''
                         Car        Make          Model  Engine
0        Toyota Rav 4 8cyl6L      Toyota         Rav 4   8cyl6L
1    Mitsubishi Eclipse 2.1T  Mitsubishi       Eclipse     2.1T
2  Monster Gravedigger 25Lsc     Monster   Gravedigger    25Lsc
'''
oaxa6hgo

oaxa6hgo2#

一个命题使用**re.sub**:

import re

df['Model'] = [re.sub(f'{b}|{c}', '', a) for a,b,c in zip(df['Car'], df['Make'], df["Engine"])]
#输出:
print(df)

                         Car        Make          Model  Engine
0        Toyota Rav 4 8cyl6L      Toyota         Rav 4   8cyl6L
1    Mitsubishi Eclipse 2.1T  Mitsubishi       Eclipse     2.1T
2  Monster Gravedigger 25Lsc     Monster   Gravedigger    25Lsc

相关问题