Search code examples
pythonpandasgroup-bystrip

how to remove leading 0 record in each group pandas python


suppose there are record

index order group Data
1 1 A 0
2 2 A 0
3 3 A 0
4 4 A 1
5 5 A 2
6 6 A 1
7 1 B 0
8 2 B 2
9 3 B -1
10 4 B 0
11 5 B 2
12 6 B 4

I would like to exclude leading 0 record Data in each group

Expecting result

index order group Data
4 4 A 1
5 5 A 2
6 6 A 1
8 2 B 2
9 3 B -1
10 4 B 0
11 5 B 2
12 6 B 4

how do I approached for this? I saw lstrip() but it only applied in each record.


Solution

  • Use GroupBy.cummax with comapre for not equal 0 in boolean indexing:

    df1 = df[df['Data'].ne(0).groupby(df['group']).cummax()]
    print (df1)
        index  order group  Data
    3       4      4     A     1
    4       5      5     A     2
    5       6      6     A     1
    7       8      2     B     2
    8       9      3     B    -1
    9      10      4     B     0
    10     11      5     B     2
    11     12      6     B     4