如何使用字典根据另一列的值(相同的df)映射df列的缺失值?蟒蛇

时间:2017-06-26 15:24:45

标签: pandas dataframe

我设法解决使用if和for循环但我正在寻找一种计算成本较低的方法来做到这一点。即使用申请或地图或任何其他技术

d = {1:10, 2:20, 3:30}

df

a    b
1    35
1    nan
1    nan
2    nan
2    47
2    nan
3    56
3    nan

我想根据dict d填充b列的缺失值,即输出应为

a    b
1    35
1    10
1    10
2    20
2    47
2    20
3    56
3    30

1 个答案:

答案 0 :(得分:3)

您可以在fillna ed a列前使用combine_firstmap

print (df['a'].map(d))
0    10
1    10
2    10
3    20
4    20
5    20
6    30
7    30
Name: a, dtype: int64

df['b'] = df['b'].fillna(df['a'].map(d))
print (df)
   a     b
0  1  35.0
1  1  10.0
2  1  10.0
3  2  20.0
4  2  47.0
5  2  20.0
6  3  56.0
7  3  30.0
df['b'] = df['b'].combine_first(df['a'].map(d))
print (df)
   a     b
0  1  35.0
1  1  10.0
2  1  10.0
3  2  20.0
4  2  47.0
5  2  20.0
6  3  56.0
7  3  30.0

如果所有值均为int,则添加astype

df['b'] = df['b'].fillna(df['a'].map(d)).astype(int)
print (df)
   a   b
0  1  35
1  1  10
2  1  10
3  2  20
4  2  47
5  2  20
6  3  56
7  3  30

如果列a中的所有数据都在dict的键中,则可以使用replace

df['b'] = df['b'].fillna(df['a'].replace(d))