使用Pandas根据不同列中的值填充NaN条目,使用字典作为指南

时间:2016-01-04 21:20:05

标签: python dictionary pandas

我有一个大型数据框,我正在尝试使用字典作为指南,根据A列中的值填充B列的NaN条目。例如:

df = 
   A    B 
0  Red  628  
1  Red  149  
2  Red  NaN  
3  Green  575  
4  Green  687
5  Green  NaN
6  Blue  159
7  Blue  NaN

和字典是(例如)

dict = {"Red": 123, "Green": 456, "Blue": 789}

我很好奇使用Pandas用字典中的相应数字替换每个NaN的最佳方法。我不确定如何在这种情况下使用.fillna()或.isnull()方法。我是Pandas的新手,所以对任何帮助表示赞赏!谢谢。

2 个答案:

答案 0 :(得分:2)

我认为您的索引看起来不合适,以下是您想要的:

In [19]:
df['B'] = df.set_index('A')['B'].fillna(d).reset_index()['B']

df
Out[19]:
       A    B
0    Red  628
1    Red  149
2    Red  123
3  Green  575
4  Green  687
5  Green  456
6   Blue  159
7   Blue  789

这里我们将索引设置为列'A'然后调用fillna传递你的dict,这将使用索引('A')执行查找以返回关联的dict值,然后我们重置索引和覆盖列'B'

答案 1 :(得分:1)

使用rows (see docs)boolean indexing map选择相关dictionary,将A转换为B值必要的:

na_map = {"Red": 123, "Green": 456, "Blue": 789}
mask = df.B.isnull()

mask如下所示:

0    False
1    False
2     True
3    False
4    False
5     True
6    False
7     True

最后:

df.loc[mask, 'B'] = df.loc[mask, 'A'].map(na_map)

       A    B
0    Red  628
1    Red  149
2    Red  123
3  Green  575
4  Green  687
5  Green  456
6   Blue  159
7   Blue  789