[英]Replace NaN with values in a row from previous matching values in column
我有以下数据框(df)。
df
city zip_code
0 city1 90287
1 city2 90288
2 city3 80023
3 city4 90210
4 city1 NaN
5 city4 NaN
6 city7 NaN
7 NaN 90210
8 NaN 80023
我想达到这个状态:
city zip_code
0 city1 90287
1 city2 90288
2 city3 80023
3 city4 90210
4 city1 90287
5 city4 90210
6 city7 NaN
7 city4 90210
8 city3 80023
我想浏览这两列并用适当的邮政编码或城市替换 NaN。
这是我所做的,但正如你所看到的,它并没有完全奏效。
bool_series = pd.notnull(df['city'])
df_1=df[bool_series].dropna()
dict_df_1=df_1.to_dict(orient='records')
d={}
for i in range(len(dict_df_1)):
d[dict_df_1[i]['city']]=dict_df_1[i]['zip_code']
d1={}
for i in range(len(dict_df_1)):
d1[dict_df_1[i]['zip_code']]=dict_df_1[i]['city']
d.update(d1)
df['zip_mapped']=df['city'].map(d)
df['city_mapped']=df['zip_code'].map(d)
df
city zip_code zip_mapped city_mapped
0 city1 90287 90287 city1
1 city2 90288 90288 city2
2 city3 80023 80023 city3
3 city4 90210 90210 city4
4 city1 NaN 90287 NaN
5 city4 NaN 90210 NaN
6 city7 NaN NaN NaN
7 NaN 90210 NaN city4
8 NaN 80023 NaN city3
如果列 'zip_mapped' 和 'city_mapped' 正确填充,我会用原始列替换它们。 有人能帮我一下吗?
让我们在不同的 groupby 上尝试fillna
两次:
df.zip_code = df.zip_code.fillna(df.zip_code.groupby(df.city).transform('first'))
df.city = df.city.fillna(df.city.groupby(df.zip_code).transform('first'))
输出:
city zip_code
0 city1 90287.0
1 city2 90288.0
2 city3 80023.0
3 city4 90210.0
4 city1 90287.0
5 city4 90210.0
6 city7 NaN
7 city4 90210.0
8 city3 80023.0
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.