繁体   English   中英

用列中先前匹配值的行中的值替换 NaN

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM