用数据集中找到的先前非空值填充 pandas 数据框的选定单元格

问题描述 投票:0回答:1

我有一个像这样的数据集:

A B
x a
x
y c
z d

假设我想更改最后两行并将这些值替换为同一列中之前的非 nan 值以获得此数据集:

A B
x a
x
x a
x a

如何获得这个?

python pandas
1个回答
0
投票

您可以创建一个系列,将 NA 值之前的最后一项分组到下一次值位于 NA 之前的时间。然后使用该系列和每个组执行

groupby
操作以获得第一个值。但是,您需要将第一个 NA 之前的分组 ID 替换为 0 以外的值,这样它们就不会分组在一起。
transform

这采用原始数据框:

import pandas as pd df = pd.DataFrame({ 'A':list('xxyzwetqyw'), 'B':[*list('aba'), pd.NA, *list('cd'), pd.NA, *list('iip')] }) g = df.isna().any(axis=1).cumsum().shift(-1).ffill() g[g.eq(0)] += list(range(-g.eq(0).sum(),0)) df.groupby(g).transform('first')

并将其转换为:

A B 0 x a 1 x b 2 y a <- value above NA 3 z <NA> 4 w c 5 e d <- value above NA 6 t <NA> 7 q i 8 y i 9 w p

© www.soinside.com 2019 - 2024. All rights reserved.