gpt4 book ai didi

python - 匹配两个 Pandas 系列: How to find a string element from one series in another series and then create a new column

转载 作者:太空宇宙 更新时间:2023-11-03 19:44:49 25 4
gpt4 key购买 nike

我目前正在清理汽车排放数据集。数据集如下所示(仅包含前 10 行):

import pandas as pd

cars_em_df = pd.DataFrame({'manufacturer_name_mapped': ['FIAT', 'FIAT','FIAT','FIAT','FIAT'],
'commercial_name':['124 gt multiair auto', '500l wagon pop star t-jet',
'doblo combi 1.4 95', 'panda 0.9t sge 85 natural power', 'punto 1.4 77 lpg'],
'fuel_type_mapped':['Petrol', 'Petrol', 'Petrol', 'NG-Biomethane', 'LPG'],
'file_year':[2018, 2018, 2018, 2018, 2018], 'emissions': [153,158,165,86,114]})

我最感兴趣的是'commercial_name'列。最终目标是向此数据框添加另一列,以显示 'commercial_name' 的“清理”版本。我有一个单独的 pandas 系列,其中包含应该使用的“正确”名称,而不是这些“困惑”名称。

real_model_names = pd.Series(['uno', '147', 'panda', 'punto', '166', '4c', 'brera', 'giulia',
'giulietta', 'gtv'])

这些也是字符串。例如,我想在 'commercial_name' 的每一行中查找是否包含 'real_model_names series' 中的任何名称。例如。 'real_model_names' 中的 'punto' 可以在 'commercial_name''punto 1.4 77 lpg' 条目中找到强>专栏。因此,我希望(在 car_em_df 的新列中)在其旁边添加 'punto' 。如果找不到,我希望显示原始的“困惑”名称。

我尝试定义一个函数,然后将其应用于“commercial_name”列。我试过这个:

def str_ops(series):
for i in real_model_names:
if i in series:
return series.replace(series, i)
else:
return series

下一步我将应用此函数并将其作为新列添加到数据框中:

commercial_name_cleaned = cars_em_df.commercial_name.apply(str_ops)
cars_em_df.insert(3,value=commercial_name_cleaned,column='commercial_name_cleaned')

但是,这没有任何作用。新列仅显示与“commercial_name”完全相同的条目。

有谁知道这个问题怎么解决吗?有一个更好的方法吗?

提前非常感谢!

最佳答案

你的循环走在正确的轨道上。我能想到的最易读和最直接的方法:

def str_ops(x):
for y in real_model_names:
if y in x:
return y
return x

cars_em_df['commercial_name_cleaned'] = cars_em_df['commercial_name'].apply(str_ops)

# Result
cars_em_df
manufacturer_name_mapped commercial_name fuel_type_mapped file_year emissions commercial_name_cleaned
0 FIAT 124 gt multiair auto Petrol 2018 153 124 gt multiair auto
1 FIAT 500l wagon pop star t-jet Petrol 2018 158 500l wagon pop star t-jet
2 FIAT doblo combi 1.4 95 Petrol 2018 165 doblo combi 1.4 95
3 FIAT panda 0.9t sge 85 natural power NG-Biomethane 2018 86 panda
4 FIAT punto 1.4 77 lpg LPG 2018 114 punto

关于python - 匹配两个 Pandas 系列: How to find a string element from one series in another series and then create a new column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60210736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com