Pandas: How can I check multiple columns if there are any values that are smaller than previous value?

Solution for a single column is already provided here: Pandas: Check if column value is smaller than any previous column value.

However, my dataset consists of many columns and I don't want to brute force many codes.

Example dataset:

    c     d     e
0   3     5     8  
1   1     5     8  
2   5     6     8  
3   6     7     8   
4   2     1     9  
5   9     3     3  

Desired result:

    c     d     e   c_diff   d_diff   e_diff
0   3     5     8    False    False    False
1   1     5     8     True    False    False
2   5     6     8    False    False    False
3   6     7     8    False    False    False
4   2     1     9     True     True    False
5   9     3     3    False    False     True

Is there any way to perform this task with simple lines of Python/Panda code?

Upvotes: 2

Views: 304

Answers (2)

ansev
ansev

Reputation: 30930

We can use DataFrame.diff with DataFrame.lt

df.diff().lt(0).add_suffix('_diff')

   c_diff  d_diff  e_diff
0   False   False   False
1    True   False   False
2   False   False   False
3   False   False   False
4    True    True   False
5   False   False    True

Upvotes: 3

Quang Hoang
Quang Hoang

Reputation: 150785

You can operate on the whole dataframe:

df.lt(df.shift()).add_suffix('_diff')

gives you

   c_diff  d_diff  e_diff
0   False   False   False
1    True   False   False
2   False   False   False
3   False   False   False
4    True    True   False
5   False   False    True

And you can join:

df.join(df.lt(df.shift()).add_suffix('_diff'))

which gives:

   c  d  e  c_diff  d_diff  e_diff
0  3  5  8   False   False   False
1  1  5  8    True   False   False
2  5  6  8   False   False   False
3  6  7  8   False   False   False
4  2  1  9    True    True   False
5  9  3  3   False   False    True

Upvotes: 2

Related Questions