Pandas 如何映射df的缺失值';s列与另一列相对应';使用字典(相同df的)s值?python
我设法用if和for循环解决了这个问题,但我正在寻找一种计算成本更低的方法。i、 e.使用apply或map或任何其他技术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
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
您可以使用或通过eda
列:
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%。“你有类似的经历吗?”大安,谢谢。我也在考虑更换,但我认为在这种情况下这是个问题。因为如果used={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))