Ali H. El-Kassas
Ali H. El-Kassas

Reputation: 117

How to get the index of each increment in pandas series?

how to get the index of pandas series when the value incremented by one?

Ex. The input is

  A
0 0
1 1
2 1
3 1
4 2
5 2
6 3
7 4
8 4

the output should be: [0, 1, 4, 6, 7]

Upvotes: 1

Views: 417

Answers (3)

BhishanPoudel
BhishanPoudel

Reputation: 17154

This makes sure the second row is incremented by one (not by two or anything else!)

df[ ((df.A.shift(-1) - df.A) == 1.0)].index.values

output is numpy array:

array([2, 5])

Example:

#                                *        *  here value increase by 1
#                          0  1  2  3  4  5  6  7
df = pd.DataFrame({ 'A' : [1, 1, 1, 2, 8, 3, 4, 4]})
df[ ((df.A.shift(-1) - df.A) == 1.0)].index.values
array([2, 5])

Upvotes: 0

cs95
cs95

Reputation: 402493

You can use Series.duplicated and access the index, should be slightly faster.

df.index[~df.A.duplicated()]
# Int64Index([0, 1, 4, 6, 7], dtype='int64')

If you really want a list, you can do this,

df.index[~df.A.duplicated()].tolist()
# [0, 1, 4, 6, 7]

Note that duplicated (and drop_duplicates) will only work if your Series does not have any decrements.


Alternatively, you can use diff here, and index into df.index, similar to the previous solution:

np.insert(df.index[df.A.diff().gt(0)], 0, 0)
# Int64Index([0, 1, 4, 6, 7], dtype='int64')

Upvotes: 2

BENY
BENY

Reputation: 323236

It is drop_duplicates

df.drop_duplicates('A').index.tolist()
[0, 1, 4, 6, 7]

Upvotes: 2

Related Questions