繁体   English   中英

在pandas的列中选择基于True或False的DataFrame中的行

[英]Select rows from a DataFrame based on True or False in a column in pandas

在pandas的列中选择基于True或False的DataFrame中的行:

例如,

import pandas as pd
df = {'uid':["1", "1", "1", "1", "2", "2", "2", "2"], 
        'type': ["a", "a", "b", "a", "a", "b", "b", "a"], 
        'is_topup':["FALSE", "FALSE", "TRUE", "FALSE","FALSE", "TRUE", "TRUE", "FALSE"],
       'label':["FALSE", "FALSE", "TRUE", "FALSE","FALSE", "TRUE", "TRUE", "FALSE"]}
df = pd.DataFrame(df)  



   uid type  is_topup  label
0   1    a    FALSE  FALSE
1   1    a    FALSE  FALSE
2   1    b     TRUE   TRUE
3   1    a    FALSE  FALSE
4   2    a    FALSE  FALSE
5   2    b     TRUE   TRUE
6   2    b     TRUE   TRUE
7   3    a    FALSE  FALSE
8   3    b     TRUE   TRUE
9   3    b     TRUE   TRUE
10  3    a    FALSE  FALSE

我想在条件中选择一行

  uid type   is_topup  label
0   1    a    FALSE  FALSE
1   1    a    FALSE  FALSE
2   1    b     TRUE   TRUE
4   2    a    FALSE  FALSE
5   2    b     TRUE   TRUE
7   3    a    FALSE  FALSE
8   3    b     TRUE   TRUE

我试着看看pandas文档,但没有找到答案。

不确定最有效的方法,但使用idxmax

new_df = df.groupby('uid').apply(lambda x: x[:(x['is_topup'] & x['label']).reset_index(drop=True).idxmax()+1])
print(new_df)

输出:

       uid type  is_topup  label
uid                             
1   0    1    a     False  False
    1    1    a     False  False
    2    1    b      True   True
2   4    2    a     False  False
    5    2    b      True   True
3   7    3    a     False  False
    8    3    b      True   True

在我看来,这很简单

result = df.drop_duplicates()

应该做的伎俩。 至少你的例子会以这种方式工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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