为了账号安全,请及时绑定邮箱和手机立即绑定

如何用另一行 Pandas 中的值替换一行中的 NaN

如何用另一行 Pandas 中的值替换一行中的 NaN

繁华开满天机 2021-09-25 16:11:29
我尝试了几种方法来用另一行中的值替换一行中的 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    d0  1   4.0  7.0  7.01  2   5.0  8.0  8.02  3   6.0  9.0  9.03  4   NaN  NaN  NaN4  5   NaN  NaN  NaN我需要用第一行的值替换第四行中的 NaN,即,   a     b     c     d0  1   **4.0   7.0   7.0**1  2    5.0   8.0   8.02  3    6.0   9.0   9.03  4   **4.0   7.0   7.0**4  5    NaN   NaN   NaN第二个问题是如何将一行中的某些/部分值乘以一个数字,例如,当列为 时,我需要将第二个中的值加倍['b', 'c', 'd'],然后结果是:   a     b     c     d0  1    4.0   7.0   7.01  2   **10.0  16.0  16.0**2  3    6.0   9.0   9.03  4    NaN   NaN   NaN4  5    NaN   NaN   NaN
查看完整描述

2 回答

?
慕森卡

TA贡献1806条经验 获得超8个赞

首先,我建议您阅读有关索引和在熊猫中选择数据的内容。Regaring可以使用的第一个问题.loc()与isnull()对列vaulues执行布尔索引:


mask_nans = test.loc[3,:].isnull()

test.loc[3, mask_nans] = test.loc[0, mask_nans]

并且要将值加倍,您还可以使用以下方法直接乘以2切片数据帧.loc():


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


查看完整回答
反对 回复 2021-09-25
?
慕村9548890

TA贡献1884条经验 获得超4个赞

用标签索引

如果您希望按 过滤a,并且a值是唯一的,请考虑将其设为索引以简化您的逻辑并使其更高效:


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


查看完整回答
反对 回复 2021-09-25
  • 2 回答
  • 0 关注
  • 255 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信