gpt4 book ai didi

python - 如何找到第一个非零元素和最后一个非零元素并修剪它

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:50 25 4
gpt4 key购买 nike

我有一个包含 120 万行 *10 列的 Pandas Df。

例如我的 DF 看起来像

Index     Time  a   b   c
0 1 0 1 0
1 2 0 0 1
2 3 0.3 0 1.5
3 4 0 1 0
4 5 0 0 5
5 6 1 0 0
6 7 0 0 0
7 8 0 1 5

我想消除列“a”的第一个非零索引之前和列“a”的最后一个非零索引之后的数据框行。在上述情况下,结果应如下所示:

我的需求

Index         Time  a   b   c
0 3 0.3 0 1.5
1 4 0 1 0
2 5 0 0 5
3 6 1 0 0

我发现发布了同样的问题 Same requirement , 但是那里他用R来做操作...我怎样才能在 python 中做到这一点????

最佳答案

首先比较列 a 是否不等于 ne ,然后获取累计和,并再次比较,通过 [::-1] 的更改顺序创建另一个掩码用于交换顺序和最后一个过滤器 boolean indexing :

m = df['a'].ne(0)
df = df[m.cumsum().ne(0) & m[::-1].cumsum().ne(0)]

print (df)
Time a b c
2 3 0.3 0 1.5
3 4 0.0 1 0.0
4 5 0.0 0 5.0
5 6 1.0 0 0.0

如果 a 列中只有 0 值,解决方案工作良好:

print (df)
Time a b c
0 1 0 1 0
1 2 0 0 1
6 7 0 0 0
7 8 0 1 5

m = df['a'].ne(0)
df = df[m.cumsum().ne(0) & m[::-1].cumsum().ne(0)]
print (df)
Empty DataFrame
Columns: [Time, a, b, c]
Index: []

关于python - 如何找到第一个非零元素和最后一个非零元素并修剪它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54555842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com