删除NaN和列值变化之间的行



我被一个看起来很简单的问题卡住了,但是我找不到一个合适的解决方案。

考虑一个给定的Pandas数据框df,由多个列A1、A2等组成,并设Ai为其填充的其中一个列,例如:

<表类> Ai tbody><<tr>253030南121515南

update

与之前的解决方案类似,但每组使用一个过滤器来保留早期的重复

m = df['Ai'].isna()
df.loc[((m|m.shift(fill_value=True))
.groupby(df['Ai'].ne(df['Ai'].shift()).cumsum())
.filter(lambda d: d.sum()>0).index
)]

输出:

Ai
0  25.0
1  25.0
2  25.0
5   NaN
6  30.0
7  30.0
9   NaN

原始回答

这相当于选择nan和下面的行。你可以使用遮罩:

m = df['Ai'].isna()
df[m|m.shift(fill_value=True)]

输出:

Ai
0  25.0
3   NaN
4  12.0
7   NaN

最新更新