Python 修改熊猫数据帧的最快方法是什么?

Python 修改熊猫数据帧的最快方法是什么?,python,pandas,dataframe,apply,Python,Pandas,Dataframe,Apply,数据帧有122145行。 以下是数据片段: country_name,subdivision_1_name,subdivision_2_name,city_name Spain,Madrid,Madrid,Sevilla La Nueva Spain,Principality of Asturias,Asturias,Sevares Spain,Catalonia,Barcelona,Seva Spain,Cantabria,Cantabria,Setien Spain,Basque Count

数据帧有122145行。 以下是数据片段:

country_name,subdivision_1_name,subdivision_2_name,city_name
Spain,Madrid,Madrid,Sevilla La Nueva
Spain,Principality of Asturias,Asturias,Sevares
Spain,Catalonia,Barcelona,Seva
Spain,Cantabria,Cantabria,Setien
Spain,Basque Country,Biscay,Sestao
Spain,Navarre,Navarre,Sesma
Spain,Catalonia,Barcelona,Barcelona
只要满足以下两个条件,我想用分区名称替换城市名称:

  • 分区名称和城市名称具有相同的国家名称和城市名称 子分部名称,以及
  • 城市名称中存在分区名称
  • 例如:对于城市名称“塞瓦”,子区域名称“巴塞罗那”作为城市名称出现在数据框中,与国家名称“西班牙”和子区域名称“加泰罗尼亚”相同,因此我将用“巴塞罗那”替换“塞瓦”

    我能够创建一个适当的应用函数。我准备了一个循环:

    for i in range(df.shape[0]):
        if df.subdivision_2_name[i] in set(df.city_name[(df.country_name == df.country_name[i]) & (df.subdivision_1_name == df.subdivision_1_name[i])]):
            df.city_name[i] = df.subdivision_2_name[i]
    
    编辑:此循环运行了1637秒(约28分钟)

    建议我一个更好的方法。

    使用:

    def f(x):
        if x['subdivision_2_name'].isin(x['city_name']).any():
            x['city_name'] = x['subdivision_2_name']
        return (x)
    
    df1 = df.groupby(['country_name','subdivision_1_name','subdivision_2_name']).apply(f)
    print (df1)
      country_name        subdivision_1_name subdivision_2_name         city_name
    0        Spain                    Madrid             Madrid  Sevilla La Nueva
    1        Spain  Principality of Asturias           Asturias           Sevares
    2        Spain                 Catalonia          Barcelona         Barcelona
    3        Spain                 Cantabria          Cantabria            Setien
    4        Spain            Basque Country             Biscay            Sestao
    5        Spain                   Navarre            Navarre             Sesma
    6        Spain                 Catalonia          Barcelona         Barcelona
    

    抱歉,我使用示例数据运行您的代码,而不是替换。我尝试理解
    对于城市名称“塞瓦”,细分城市名称“巴塞罗那”在数据框中也是一个城市名称,具有相同的国家名称“西班牙”和相同的细分城市名称“加泰罗尼亚”,因此我将用“巴塞罗那”替换“塞瓦”.
    但失败。可能问题在于样本数据中没有
    分区\u 2\u名称存在于城市\u名称中
    因此无法替换
    Seva
    。是否可能更改数据并添加预期输出,这意味着替换了哪些值?代码段示例只是为了给出有关问题的上下文。在分区1_名称“加泰罗尼亚”和分区2_名称“巴塞罗那”子集下的完整数据中,城市名称中有多个值。一个是城市名称中的“巴塞罗那”。在这种情况下,“塞瓦”将改为“巴塞罗那”。为了避免混淆,我将把它添加到片段中。请花点时间阅读这篇文章