我有一个Pandas 数据框,只有一列,它以一些值为零结束,如下所示:

index value
0    4.0
1    34.0
2    -2.0
3    15.0
...    ...
96     0.0
97     45
98     0.0
99     0.0
100    0.0

我想go 掉包含零值的尾随行,生成以下数据帧:

index value
0    4.0
1    34.0
2    -2.0
3    15.0
...    ...
96     0.0
97     45

我如何通过利用Pandas 的功能来做到这一点?

我知道我可以迭代地判断数据帧的最后一个值,如果它是零,则删除它,但我更愿意以一种利用Pandas 内置函数的方式来做这件事,因为这样会快得多.

while df.iloc[-1,0] == 0:
    df.drop(df.tail(1).index,inplace=True)

编辑:明确地说,数据帧可能包含也可能不包含其他零.然而,我只想go 掉尾随的零,而其他零应该保持不变.我已经相应地编辑了这个例子.

推荐答案

boolean indexing与反转的cummax一起使用:

out = df[df.loc[::-1, 'value'].ne(0).cummax()]

输出:

       value
index       
0        4.0
1       34.0
2       -2.0
3       15.0
97      45.0

中级:

       value   mask
index              
0        4.0   True
1       34.0   True
2       -2.0   True
3       15.0   True
97      45.0   True
98       0.0  False
99       0.0  False
100      0.0  False

或者,如果您确定至少有一个非零值:

out = df.loc[:df.loc[::-1, 'value'].ne(0).idxmax()]

Python相关问答推荐

将列中的滚动值集转换为单元格中的单个值

Pandas 按照特殊规则保留每n行

来自ARIMA结果的模型方程

Python中的Pool.starmap异常处理

使用Python和PRNG(不是梅森龙卷风)有效地生成伪随机浮点数在[0,1)中均匀?

阅读Polars Python中管道的函数定义

NumPy中的右矩阵划分,还有比NP.linalg.inv()更好的方法吗?

在使用Guouti包的Python中运行MPP模型时内存不足

跟踪我已从数组中 Select 的样本的最有效方法

Pydantic 2.7.0模型接受字符串日期时间或无

连接两个具有不同标题的收件箱

为什么tkinter框架没有被隐藏?

Gekko:Spring-Mass系统的参数识别

使用setuptools pyproject.toml和自定义目录树构建PyPi包

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

对象的`__call__`方法的setattr在Python中不起作用'

在极性中创建条件累积和

Pandas Loc Select 到NaN和值列表

如何指定列数据类型

try 检索blob名称列表时出现错误填充错误""