[英]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
我是新手,所以任何幫助將不勝感激:)。
刪除空值和重復項后,可以創建系列映射。
然后使用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
首先出現在一個組中,該解決方案也將起作用。
我相信
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.