Reputation: 9
What I have is below.
DOG | Date | Steps |
---|---|---|
Tiger | 2021-11-01 | 164 |
Oakley | 2021-11-01 | 76 |
Piper | 2021-11-01 | 65 |
Millie | 2021-11-01 | 188 |
Oscar | 2021-11-02 | 152 |
Foster | 2021-11-02 | 191 |
Zeus | 2021-11-02 | 101 |
Benji | 2021-11-02 | 94 |
Lucy | 2021-11-02 | 186 |
Rufus | 2021-11-02 | 65 |
Hank | 2021-11-03 | 98 |
Olive | 2021-11-03 | 122 |
Ellie | 2021-11-03 | 153 |
Thor | 2021-11-03 | 152 |
Nala | 2021-11-03 | 181 |
Mia | 2021-11-03 | 48 |
Bella | 2021-11-03 | 23 |
Izzy | 2021-11-03 | 135 |
Pepper | 2021-11-03 | 22 |
Diesel | 2021-11-04 | 111 |
Dixie | 2021-11-04 | 34 |
Emma | 2021-11-04 | 56 |
Abbie | 2021-11-04 | 32 |
Guinness | 2021-11-04 | 166 |
Kobe | 2021-11-04 | 71 |
What I want is below. Rank by value of ['Steps'] column for each Date
DOG | Date | Steps | Rank |
---|---|---|---|
Tiger | 2021-11-01 | 164 | 2 |
Oakley | 2021-11-01 | 76 | 3 |
Piper | 2021-11-01 | 65 | 4 |
Millie | 2021-11-01 | 188 | 1 |
Oscar | 2021-11-02 | 152 | 3 |
Foster | 2021-11-02 | 191 | 1 |
Zeus | 2021-11-02 | 101 | 4 |
Benji | 2021-11-02 | 94 | 5 |
Lucy | 2021-11-02 | 186 | 2 |
Rufus | 2021-11-02 | 65 | 6 |
Hank | 2021-11-03 | 98 | 6 |
Olive | 2021-11-03 | 122 | 5 |
Ellie | 2021-11-03 | 153 | 2 |
Thor | 2021-11-03 | 152 | 3 |
Nala | 2021-11-03 | 181 | 1 |
Mia | 2021-11-03 | 48 | 7 |
Bella | 2021-11-03 | 23 | 8 |
Izzy | 2021-11-03 | 135 | 4 |
Pepper | 2021-11-03 | 22 | 9 |
Diesel | 2021-11-04 | 111 | 2 |
Dixie | 2021-11-04 | 34 | 5 |
Emma | 2021-11-04 | 56 | 4 |
Abbie | 2021-11-04 | 32 | 6 |
Guinness | 2021-11-04 | 166 | 1 |
Kobe | 2021-11-04 | 71 | 3 |
I tried below, but it failed.
df['Rank'] = df.groupby('Date')['Steps'].rank(ascending=False)
Upvotes: 0
Views: 474
Reputation: 863531
First your solution for me working.
Maybe need method='dense'
and casting to integers.
df['Rank'] = df.groupby('Date')['Steps'].rank(ascending=False, method='dense').astype(int)
Upvotes: 0