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

Pandas 填充其他行中列中缺失的数据

Pandas 填充其他行中列中缺失的数据

小唯快跑啊 2023-07-18 15:32:53
我有一个如下所示的 df :df = pd.DataFrame({'id': ['a','b','c','d'],                   'ac' : ['123','223', np.nan, np.nan],                   'prev' : [np.nan, np.nan, 'a','b']})输出:    id  ac   prev0   a   123  NaN  1   b   223  NaN  2   c   NaN  a  3   d   NaN  b对于 ac 为空,获取 prev 的值,然后查找 id 列。使用 ac 列中的值填充空值。预期输出:    id  ac   prev0   a   123  NaN1   b   223  NaN2   c   123  a3   d   223  b我该如何实现这一目标?谢谢。
查看完整描述

2 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

您可以使用此掩码对列与列的值Series.isna使用布尔索引来创建布尔掩码,基于:mapprevacid


m = df['ac'].isna()

df.loc[m, 'ac'] = df.loc[m, 'prev'].map(df.set_index('id')['ac'])

结果:


  id   ac prev

0  a  123  NaN

1  b  223  NaN

2  c  123    a

3  d  223    b


查看完整回答
反对 回复 2023-07-18
?
潇湘沐

TA贡献1816条经验 获得超6个赞

如果我理解正确,您希望使用“id”给出的值填充“ac”列的 nan 值,该值由“prev”列中的相应值指示。如果是这样,您可以尝试使用“id”作为索引,以便您可以使用 .loc 访问您感兴趣的行


import pandas as pd

import numpy as np


df = pd.DataFrame({'id': ['a', 'b', 'c', 'd'],

                   'ac': ['123', '223', np.nan, np.nan],

                   'prev': [np.nan, np.nan, 'a', 'b']})



df.set_index('id', inplace=True)

to_fill = df.loc[df['ac'].isnull()]

fill_with = df.loc[to_fill['prev'], 'ac'].copy()

fill_with = fill_with.values

df.loc[to_fill.index, 'ac'] = fill_with


最终结果是:


print(df)

     ac prev

id          

a   123  NaN

b   223  NaN

c   123    a

d   223    b

请注意,如果“id”列没有重复值,则此代码有效。希望我有帮助!


查看完整回答
反对 回复 2023-07-18
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

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