我设法解决使用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
答案 0 :(得分:3)
您可以在fillna
ed a
列前使用combine_first
或map
:
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))