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

我有一个如下所示的 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   prev

0   a   123  NaN  

1   b   223  NaN  

2   c   NaN  a  

3   d   NaN  b

对于 ac 为空,获取 prev 的值,然后查找 id 列。使用 ac 列中的值填充空值。


预期输出:


    id  ac   prev

0   a   123  NaN

1   b   223  NaN

2   c   123  a

3   d   223  b

我该如何实现这一目标?谢谢。


小唯快跑啊
浏览 121回答 2
2回答

元芳怎么了

您可以使用此掩码对列与列的值Series.isna使用布尔索引来创建布尔掩码,基于:mapprevacidm = df['ac'].isna()df.loc[m, 'ac'] = df.loc[m, 'prev'].map(df.set_index('id')['ac'])结果:  id   ac prev0  a  123  NaN1  b  223  NaN2  c  123    a3  d  223    b

潇湘沐

如果我理解正确,您希望使用“id”给出的值填充“ac”列的 nan 值,该值由“prev”列中的相应值指示。如果是这样,您可以尝试使用“id”作为索引,以便您可以使用 .loc 访问您感兴趣的行import pandas as pdimport numpy as npdf = 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.valuesdf.loc[to_fill.index, 'ac'] = fill_with最终结果是:print(df)     ac previd          a   123  NaNb   223  NaNc   123    ad   223    b请注意,如果“id”列没有重复值,则此代码有效。希望我有帮助!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python