![](/img/trans.png)
[英]How can I filter a Pandas DataFrame based on whether all aggregated values in a column are True?
[英]Filter pandas dataframe based on opposite condition whether True/False in a column
我想从下面的 dataframe 中删除 pandas dataframe 列“msgid”上的重复行,并保持满足以下条件的值:
从评估“tr_flag”开始:
我尝试了使用 sql 的方法:通过使用 Case 语句并按 msgid 进行分区。 但无法获得所有三种情况,只能获得第一和第二。 sql 可以还是其他更好的方法?
数据集:
Date plid evid msgid tr_type tr_flag
0 08-11-2021 pl1 111 msg1 new False
1 08-11-2021 pl1 222 msg1 new False
2 08-11-2021 pl1 333 msg1 new False
3 08-11-2021 pl1 444 msg2 new False
4 08-11-2021 pl1 555 msg2 new True
5 08-11-2021 pl1 666 msg2 new False
6 08-11-2021 pl1 777 msg3 new True
7 08-11-2021 pl1 888 msg3 new True
8 08-11-2021 pl1 999 msg3 new True
您可以分配一个自定义排序键(此处为负 'tr_flag' 为 True,为正为 False),按键排序, groupby
'msgid` 并保留第一行:
(df.assign(key=df['tr_flag'].eq(False).mul(2).sub(1).mul(df['evid']))
.sort_values(by='key')
.groupby('msgid').first()
.drop('key', axis=1)
)
output:
Date plid evid tr_type tr_flag
msgid
msg1 08-11-2021 pl1 111 new False
msg2 08-11-2021 pl1 555 new True
msg3 08-11-2021 pl1 999 new True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.