获取熊猫数据框中的下一个非 nan 值

时间:2021-01-27 18:09:47

标签: python-3.x pandas dataframe numpy nan

我有一个如下所示的数据框:

A    B  
10  NaN
NaN 20
NaN NaN
NaN NaN
NaN NaN
NaN 50
20  NaN
NaN 30
NaN NaN
30  30
40  NaN
NaN 10

这里我需要为 A 列的每个非 NaN 值返回上一个和下一个 B 列值。

我使用的代码是:

df['prev_b'] = NP.where(df['A'].notna(), df['B'].shift(-1),NP.nan)

df['next_b'] = NP.where(df['A'].notna(), df['B'].shift(1),NP.nan)

所需的输出是:

A    B   prev_b next_b
10  NaN  NaN    20
NaN 20   NaN    NaN
NaN NaN  NaN    NaN
NaN NaN  NaN    NaN
NaN NaN  NaN    NaN
NaN 50   NaN    Nan
20  NaN  50     30  
NaN 30   NaN    NaN
NaN NaN  NaN    NaN
30  30   30     30
40  NaN  30     10
NaN 10   NaN    NaN

有人帮我纠正我的逻辑。

1 个答案:

答案 0 :(得分:3)

在你的 numpy where 中使用向前或向后填充;它应该正确对齐以获得您的下一个/上一个非 nan 值:

    df.assign(
    prev_b=np.where(df.A.notna(), df.B.ffill(), np.nan),
    next_b=np.where(df.A.notna(), df.B.bfill(), np.nan),
)