Python 根据数据框中列的True或False从数据框中选择行
根据数据框中列的True或False从数据框中选择行: 比如说,Python 根据数据框中列的True或False从数据框中选择行,python,pandas,Python,Pandas,根据数据框中列的True或False从数据框中选择行: 比如说, 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", "FAL
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文档,但没有找到答案。在我看来,一个简单的
result = df.drop_duplicates()
我们应该做到这一点。至少您给出的示例可以这样工作。不确定最有效的方法,但使用
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
你说的“停下来”是什么意思?你能解释一下你想放下哪一行吗。在没有说明要删除哪些行的情况下,删除它们似乎是没有逻辑依据的。为什么我必须删除第3、6、9和10行?似乎不需要删除重复项(0和1是重复项)。不是这样,我需要所有uid和一些行。示例uid=3 new,有4行,我想要2行(7,8)是补码,标签更改为TRUE TRUEyes,但“str和bool不支持的操作数类型”是
是补码
和标签
str
s?在这种情况下,将(x['is_-toup']&x['label'])
替换为(x['is_-toup'].eq('TRUE')&x['label'].eq('TRUE'))