簡體   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