繁体   English   中英

如果存在,pandas会根据城市填写缺少的国家/地区值

[英]pandas fill missing country values based on city if it exists

我正在尝试在我的数据框中填写国家/地区名称,如果它基于城市和国家/地区名称为空,则存在。 例如,请参阅下面的数据框,如果数据框中存在此类城市,我想在此处将班加罗尔市的NaN替换为印度国家

df1=
         City Country
0   Bangalore   India
1       Delhi   India
2      London      UK
3  California     USA
4       Dubai     UAE
5   Abu Dhabi     UAE
6   Bangalore     NaN

我是新手,所以任何帮助将不胜感激:)。

删除空值和重复项后,可以创建系列映射。

然后使用fillnapd.Series.map

g = df.dropna(subset=['Country']).drop_duplicates('City').set_index('City')['Country']
df['Country'] = df['Country'].fillna(df['City'].map(g))

print(df)

         City Country
0   Bangalore   India
1       Delhi   India
2      London      UK
3  California     USA
4       Dubai     UAE
5    AbuDhabi     UAE
6   Bangalore   India

如果NaN首先出现在一个组中,该解决方案也将起作用。

我相信

df1.groupby('City')['Country'].fillna(method='ffill')

应该通过向前填充组内的缺失值来解决您的问题。

其中一种方法可能是 -

non_null_cities = df1.dropna()。drop_duplicates(['City'])。rename(columns = {'Country':'C'})
df1 = df1.merge(non_null_cities,on ='City',how ='left')
df1.loc [df1 ['Country']。isnull(),'Country'] = df1 ['C']
del df1 ['C']

希望这会有所帮助!

这是一种令人讨厌的方式。

首先使用前向填充,然后使用后向填充(首先出现可能的NaN)

df = df.groupby('City')[['City','Country']].fillna(method = 'ffill').groupby('City')[['City','Country']].fillna(method = 'bfill')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM