如果根据存在的城市和国家/地区名称为 null,我正在尝试在我的数据框中填充国家/地区名称。例如,请参阅下面的数据框,如果数据框中存在这样的城市,我想将班加罗尔城市的 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')