【问题标题】:how to replace nan value using the value of which from other rows with common column value如何使用其他行中具有公共列值的值替换 nan 值
【发布时间】:2021-12-09 12:09:33
【问题描述】:

使用 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')

【问题讨论】:

  • @Riley 即使我看了这个文档,我也不知道使用哪种方法..你能帮我吗?
  • a["A"].fillna(a["B"])
  • @Riley 我认为这不是正确的方法,首先 Nan 应该使用第 6 行替换为“5”
  • 啊,好吧,我明白你现在在做什么了。我以为你的前 5 个是错字。所以 B 中的 1 总是意味着 A 中的 1。B 中的 3 总是意味着 A 中的 5 等等?

标签: pandas merge nan


【解决方案1】:

我们需要从B 列中的值到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

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

【讨论】:

  • 太棒了!!!!!!非常感谢...!!从来没有使用映射的经验...!!
猜你喜欢
  • 2023-03-03
  • 2013-01-13
  • 2023-01-25
  • 2021-10-28
  • 1970-01-01
  • 2020-01-04
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多