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

2024-04-26 18:41:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似下面的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为null,获取prev的值,然后查找id列。用ac列中的值填充null

预期产出:

    id  ac   prev
0   a   123  NaN
1   b   223  NaN
2   c   123  a
3   d   223  b

我如何做到这一点?谢谢


2条回答

如果我理解正确,您希望用“prev”列对应值指示的“id”给出的值填充“ac”列的nan值。如果是这样,您可以尝试使用“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”列没有重复的值,则此代码有效。希望我能帮忙

您可以使用^{}来创建布尔掩码,使用此掩码的布尔索引来map基于idprev列的值ac列的值id

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

相关问题 更多 >