shashank
shashank

Reputation: 410

Select a specific value in a group using python pandas

I have a dataset with below data.

id status div
1  True    0
2  False   2
2  True    1
3  False   4
3  False   5
1  False   5
4  True    3
4  True    10
5  False   3
5  False   3
5  True    2

I want my output as

id status  div
1  True    0
2  True    1
3  False   4
4  True    3
5  True    2

If true is present in the group i want it to be true else if only False is present i want to be False.

I have tried using Pandas group by but unable to select the condition.

Upvotes: 1

Views: 1159

Answers (1)

jezrael
jezrael

Reputation: 862851

Use DataFrameGroupBy.any with map by helper Series with first Truerow per groups if exist:

s = (df.sort_values(['status','id'], ascending=False)
       .drop_duplicates('id')
       .set_index('id')['div'])
print (s)
id
5    2
4    3
2    1
1    0
3    4
Name: div, dtype: int64

df1 = df.groupby('id')['status'].any().reset_index()
df1['div'] = df1['id'].map(s)
print (df1)
   id  status  div
0   1    True    0
1   2    True    1
2   3   False    4
3   4    True    3
4   5    True    2

Upvotes: 1

Related Questions