Pandas 如何映射df的缺失值';s列与另一列相对应';使用字典(相同df的)s值?python

Pandas 如何映射df的缺失值';s列与另一列相对应';使用字典(相同df的)s值?python,pandas,dataframe,Pandas,Dataframe,我设法用if和for循环解决了这个问题,但我正在寻找一种计算成本更低的方法。i、 e.使用apply或map或任何其他技术 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

我设法用if和for循环解决了这个问题,但我正在寻找一种计算成本更低的方法。i、 e.使用apply或map或任何其他技术

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
您可以使用或通过ed
a
列:

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

如果所有值都是
int
s,则添加:

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

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

请不要发布代码的图片,而是发布实际代码。我已经对你的帖子进行了适当的编辑。谢谢你,我已经花了一个小时的时间在想怎么做,这是我的第一个问题。回答得好@jezrael!绝对比我的复杂,+1!只有一个问题,当使用
.replace(to_replace=d))
而不是
.map(d)
时,我的速度提高了25%。“你有类似的经历吗?”大安,谢谢。我也在考虑更换,但我认为在这种情况下这是个问题。因为如果use
d={1:10,2:20}
那么在replace之后,键3的nan被3替换。但也可能是楠。但这取决于数据,如果所有键都是相同的,并且列的值是唯一的,则可以使用replace。祝你好运
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
df['b'] = df['b'].fillna(df['a'].replace(d))