Python 如何将一行中的NaN替换为另一行中的值
我尝试了几种方法用另一行中的值替换一行中的NaN,但都没有达到预期效果。这是我的数据框:Python 如何将一行中的NaN替换为另一行中的值,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我尝试了几种方法用另一行中的值替换一行中的NaN,但都没有达到预期效果。这是我的数据框: test = pd.DataFrame( { "a": [1, 2, 3, 4, 5], "b": [4, 5, 6, np.nan, np.nan], "c": [7, 8, 9, np.nan, np.nan], "d": [7, 8, 9, np.nan, np.nan] } ) a b c
test = pd.DataFrame(
{
"a": [1, 2, 3, 4, 5],
"b": [4, 5, 6, np.nan, np.nan],
"c": [7, 8, 9, np.nan, np.nan],
"d": [7, 8, 9, np.nan, np.nan]
}
)
a b c d
0 1 4.0 7.0 7.0
1 2 5.0 8.0 8.0
2 3 6.0 9.0 9.0
3 4 NaN NaN NaN
4 5 NaN NaN NaN
我需要将第4行中的NaN替换为第一行中的值,即
a b c d
0 1 **4.0 7.0 7.0**
1 2 5.0 8.0 8.0
2 3 6.0 9.0 9.0
3 4 **4.0 7.0 7.0**
4 5 NaN NaN NaN
第二个问题是如何将一行中的一些/部分值乘以一个数字,例如,当列为['b','c','d']
时,我需要将第二行中的值加倍,结果是:
a b c d
0 1 4.0 7.0 7.0
1 2 **10.0 16.0 16.0**
2 3 6.0 9.0 9.0
3 4 NaN NaN NaN
4 5 NaN NaN NaN
首先,我建议你读一些关于熊猫的书。 关于第一个可用于对列vaulues执行布尔索引的问题:
mask_nans = test.loc[3,:].isnull()
test.loc[3, mask_nans] = test.loc[0, mask_nans]
要将值加倍,您可以直接乘以切片数据帧2
,也可以使用:
使用标签索引
如果您希望通过<代码> > <代码> >代码> > 值是唯一的,请考虑将其作为简化逻辑的索引,并使其更有效:
test = test.set_index('a')
test.loc[4] = test.loc[4].fillna(test.loc[1])
test.loc[2] *= 2
布尔掩码
如果a
不是唯一的,并且需要布尔掩码,您仍然可以使用fillna
,并执行一个附加步骤:
mask = test['a'].eq(4)
test.loc[mask] = test.loc[mask].fillna(test.loc[test['a'].eq(1).idxmax()])
test.loc[test['a'].eq(2)] *= 2
嗨,尼克松。谢谢你回答我的问题。但是对于第一个问题,我只需要替换NaN值,而不是整行。谢谢,jpp。你的回答很有帮助!
mask = test['a'].eq(4)
test.loc[mask] = test.loc[mask].fillna(test.loc[test['a'].eq(1).idxmax()])
test.loc[test['a'].eq(2)] *= 2