根据条件的最后一次出现划分数据帧

时间:2017-05-15 17:00:19

标签: python pandas numpy dataframe

假设我按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

有谁知道怎么做?

1 个答案:

答案 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