dennis vlaar
dennis vlaar

Reputation: 53

check if column value changes for grouped dataframe

I want to check if a column value changes for each unique value of "Name".

The dataframe I have looks like this

Name Is finished?
Paul No
Paul No
Paul No
John No
John No
John Yes
John Yes
Ringo No
Ringo No
Ringo Yes
Ringo Yes
Ringo Yes

My desired output is an extra column which either says "True" if a value has changed, and "False" if it didn't change. Desired output would look like this:

| Name | Is finished? | Change|
| -------- | -------------- |---|
| Paul    |      No|  False|
| Paul   | No|False|
| Paul    | No|False|
| John   | No|False|
| John    | No|False|
| John   | Yes|True|
| John| Yes|False|
| Ringo   | No|False|
| Ringo   | No|False|
| Ringo   | Yes|True|
| Ringo   | Yes|False|
| Ringo   | Yes|False|

Upvotes: 1

Views: 56

Answers (1)

Shubham Sharma
Shubham Sharma

Reputation: 71689

Let us do groupby and shift to compare the current and previous row in Is finished column

c = 'Is finished?'
df['Change'] = df[c].eq('Yes') & df.groupby('Name')[c].shift().eq('No')

     Name Is finished?  Change
0    Paul           No   False
1    Paul           No   False
2    Paul           No   False
3    John           No   False
4    John           No   False
5    John          Yes    True
6    John          Yes   False
7   Ringo           No   False
8   Ringo           No   False
9   Ringo          Yes    True
10  Ringo          Yes   False
11  Ringo          Yes   False

Upvotes: 1

Related Questions