我尝试了几种用另一行中的值替换行中的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 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
我需要将第四行的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
答案 0 :(得分:2)
首先,我建议您阅读Indexing and selecting data的熊猫书。
关于第一个问题,您可以将.loc()
与isnull()
结合使用以对列值执行布尔索引:
mask_nans = test.loc[3,:].isnull()
test.loc[3, mask_nans] = test.loc[0, mask_nans]
要使值加倍,还可以使用.loc()
直接乘以2
切片的数据帧:
test.loc[1,'b':] *= 2
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 4.0 7.0 7.0
4 5 NaN NaN NaN
答案 1 :(得分:1)
如果您希望按data.aws_ami_id
进行过滤,并且a
的值是唯一的,请考虑将其作为索引以简化逻辑 并使之更有效:
a
如果test = test.set_index('a')
test.loc[4] = test.loc[4].fillna(test.loc[1])
test.loc[2] *= 2
不是唯一的,并且需要布尔掩码,您仍然可以在其他步骤中使用a
:
fillna