我被一个看起来很简单的问题卡住了,但是我找不到一个合适的解决方案。
考虑一个给定的Pandas数据框df
,由多个列A1、A2等组成,并设Ai
为其填充的其中一个列,例如:
<表类>
Ai
tbody><<tr>25 30 30 南 12 15 15 南 表类>
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