Python 熊猫根据城市(如果存在)填充缺失的国家/地区值

Python 熊猫根据城市(如果存在)填充缺失的国家/地区值,python,pandas,Python,Pandas,如果数据框中的城市和国家名称为空,我会尝试在数据框中填充国家名称,而城市和国家名称是存在的。例如,见下面的数据框,这里我想用国家印度替换班加罗尔市的NaN,如果数据框中存在这样的城市 df1= City Country 0 Bangalore India 1 Delhi India 2 London UK 3 California USA 4 Dubai UAE 5 Abu Dhabi UAE

如果数据框中的城市和国家名称为空,我会尝试在数据框中填充国家名称,而城市和国家名称是存在的。例如,见下面的数据框,这里我想用国家印度替换班加罗尔市的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
我是新手,因此任何帮助都将不胜感激:)

我相信

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

应通过转发组中缺少的值来解决问题。

其中一种方法是-

non_null_cities=df1.dropna()。删除重复项(['City'])。重命名(列={'Country':'C'})
df1=df1.merge(非空城市,on='City',how='left')
df1.loc[df1['Country'].isnull(),'Country']=df1['C']
del df1['C']


希望这将是有益的

您可以在删除空值和重复项后创建序列映射

然后将
fillna
pd.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
首先出现在一个组中,此解决方案也会起作用。

这里有一个讨厌的方法

首先使用正向填充,然后使用反向填充(对于可能首先发生的NaN)


groupby和fillnaUse
df.groupby('City').Country.ffill()
df.groupby('City').Country.transform('first')
您已经尝试了什么,到目前为止您的研究结果是什么?如果
NaN
首先出现怎么办?非常感谢这正是我想要的:)
df = df.groupby('City')[['City','Country']].fillna(method = 'ffill').groupby('City')[['City','Country']].fillna(method = 'bfill')