首页 > 解决方案 > 如何使用其他行中具有公共列值的值替换 nan 值

问题描述

使用 B 列作为参考如何替换 NaN 值

>>> a
A   B  
1   1     
Nan 3     
1   1    
Nan 1
Nan 2      
5   3       
1   1    
2   2 

我想要这样的结果。

>> result 
A   B  
1   1     
5   3     
1   1    
1   1
2   2      
5   3       
1   1    
2   2   

我尝试在列上合并,b但无法弄清楚 b=a.groupby('B').reset_index() dfM = pd.merge(a,b,on='B', how ='left')

标签: pandasmergenan

解决方案


我们需要一个从 columnB中的值到A.

mapping = a.dropna().drop_duplicates().set_index("B")["A"]

看起来像这样

B
1    1.0
3    5.0
2    2.0
Name: A, dtype: float64

此时填充空值变得无关紧要。我们可以映射B来获取列A

a["B"].map(mapping)

这给你

0    1.0
1    5.0
2    1.0
3    1.0
4    2.0
5    5.0
6    1.0
7    2.0
Name: B, dtype: float64

A如果需要,转换为 int 并使用它来覆盖原始数据框中的列。


推荐阅读