我有一个包含以下数据的数据集。
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
我希望我的输出为
id status div
1 True 0
2 True 1
3 False 4
4 True 3
5 True 2
如果组中存在真,我希望它是真的,否则如果只有假存在,我想成为假。
我尝试使用熊猫组,但无法选择条件。
将DataFrameGroupBy.any
与帮助程序map
一起使用,Series
每个组的第一行True
行(如果存在):
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