繁体   English   中英

根据相反的条件筛选 pandas dataframe 是否在列中为 True/False

[英]Filter pandas dataframe based on opposite condition whether True/False in a column

我想从下面的 dataframe 中删除 pandas dataframe 列“msgid”上的重复行,并保持满足以下条件的值:

从评估“tr_flag”开始:

  1. 如果 True 和 False 混合,则保留 True
  2. 如果全部为 False,则保留 min(evid)
  3. 如果不止一个为真,则保持最大(evid)。

我尝试了使用 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM