如何通过匹配第1列以键入字典来仅用字典值替换第2列中的空值?有条件的查找有条件的替换

时间:2019-05-01 13:54:46

标签: python pandas numpy jupyter-notebook

我试图通过将第1列中的值与字典中的键匹配来仅用字典中的值替换第2列中的空值。

Country Rate    Tax Rate
Algeria 2.00%   76.90%
Angola  5.00%    null
Algeria 2.00%    null
Angola  5.00%    null
Algeria 2.10%   76.90%
Angola  4.90%   52.10%
Algeria 2.20%   76.90%
  1. 我计算了平均税率购买国家/地区。
  2. 我删除了所有没有均值计算的国家:所有值都为空
  3. 我根据结果{country,TR(mean)} =(k,v)创建了字典
  4. 我创建了将税率中的值替换为dict中匹配国家/地区的代码

注意:它将代替税率中的所有值,而不仅仅是空值

tr = df.groupby('country')['tax rate'].mean()
tr.dropna(inplace=True)
tr_dict = tr.to_dict()
df['tax rate'] = df['country'].apply(lambda x: tr_dict.get(x))

结果

Country Rate    Tax Rate
Algeria 2.00%   mean of Algeria
Angola  5.00%   mean of Angola
Algeria 2.00%   mean of Algeria 
Angola  5.00%   mean of Angola 
Algeria 2.10%   mean of Algeria
Angola  4.90%   mean of Angola
Algeria 2.20%   mean of Algeria

我相信我在代码末尾缺少一些内容,因为它可以正确地将值替换为“国家/地区”,但是它可以替换所有“税率”值,并且我只需要替换空值即可。

*预期结果*

Country Rate    Tax Rate
Algeria 2.00%   76.90%
Angola  5.00%    mean of Angola
Algeria 2.00%    mean of Algeria
Angola  5.00%    mean of Angola
Algeria 2.10%   76.90%
Angola  4.90%   52.10%
Algeria 2.20%   76.90%

1 个答案:

答案 0 :(得分:1)

尝试使用transform并使用fillna

df['tax rate']=df['tax rate'].fillna(df.groupby('country')['tax rate'].transform('mean'))