[英]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.