假设我按id
排序了这些数据:
id | count
1 1
2 2
3 0
4 4
5 3
6 2
7 0
8 10
9 1
10 2
我希望始终获得最后 zero
之后的最后一次更改。根据上面的数据,我想得到:
id | count
8 10
9 1
10 2
有谁知道怎么做?
答案 0 :(得分:4)
pandas
df.loc[df['count'].ne(0).iloc[::-1].cumprod().astype(bool)]
id count
7 8 10
8 9 1
9 10 2
numpy
df[(df['count'].values[::-1] != 0).cumprod()[::-1].astype(bool)]
id count
7 8 10
8 9 1
9 10 2
与其他条件
df[(df['count'].values[::-1] < 3).cumprod()[::-1].astype(bool)]
# df.loc[df['count'].lt(3).iloc[::-1].cumprod().astype(bool)]
id count
8 9 1
9 10 2
<强>调试强>
您应该能够复制并粘贴此内容并重现我的结果。如果你不能,那么还有其他错误。尝试重置内核。
import pandas as pd
df = pd.DataFrame({
'count': [1, 2, 0, 4, 3, 2, 0, 10, 1, 2],
'id': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
})
df[(df['count'].values[::-1] < 3).cumprod()[::-1].astype(bool)]
应该产生
count id
8 1 9
9 2 10