0

I have a DataFrame similar to the following

date      mood    score   count  avg       abs
23/12/18 negative -50.893   137  -0.371     50.893
23/12/18 neutral  0.2193    10   0.0219     0.2193
23/12/18 positive 336.5098  673  0.5000     336.5098
24/12/18 positive 91.2414   232  -0.393     91.2414
24/12/18 neutral  0.063     14   0.0045     0.063
24/12/18 negative -649.697  1184 0.5487     649.697
25/12/18 negative -72.4142  8   -9.0517     72.4142
25/12/18 positive   0       0    0          0
25/12/18 neutral  323.0056  173 1.86708     323.0056
26/12/18 negative -12.0467   15 -.8031      12.0467

I want to apply the following conditions to this dataset.

Con: if the absolute value(abs) score on a date is the greatest (of 3 moods), keep that date only together with its other attributes. 
Con: No duplicate date is to be kept. So the dataset will be reduced quite a lot compared to its original size.

Expected Output

date       mood_corrected   score   count   avg          abs
23/12/18    positive      336.5098  673    0.50001456   336.5098
24/12/18    negative      649.697   1184   0.54873057   649.697
25/12/18    neutral       323.0056  173    1.86708439   323.0056
26/12/18    negative      -12.0467  15     -0.8031      12.0467

My code

import pandas as pd 

df =pd.read_csv('file.csv')

new_df= df.sort_values('abs', ascending=False).drop_duplicates(['date','mood'])

While I get result that sort the dataset based on absolute value**(abs)**, I still have the full dataset. It is not reduced. Any help is appreciated. Many thanks.

Note: I looked at stackoverflow but have not found a quite similar problem.

1 Answer 1

3

The following will do the job!

new_df = df.sort_values('abs', ascending=False).drop_duplicates(['date']).sort_values('date')
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.