Python 熊猫根据城市(如果存在)填充缺失的国家/地区值
如果数据框中的城市和国家名称为空,我会尝试在数据框中填充国家名称,而城市和国家名称是存在的。例如,见下面的数据框,这里我想用国家印度替换班加罗尔市的NaN,如果数据框中存在这样的城市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
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')