dataframe有122,145行。以下是数据片段:
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在满足以下两项条件时,我希望用city_name替换subdivision_2_name:
例:对于city_name "Seva“,subdivison_2_name”巴塞罗那“也是以city_name的形式出现在dataframe中,有着同样的country_name”西班牙“和同样的subdivision_1_name "Catalonia”,所以我将把"Seva“替换为”巴塞罗那“。
我能够创造一个适当的申请功能。我准备了一个循环:
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分钟)。
给我一个更好的方法。
发布于 2019-12-09 08:42:33
使用:
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 Barcelonahttps://stackoverflow.com/questions/59243188
复制相似问题