考虑一下这个数据:
name age scores
0 Alice 8 (False, 0, 89.1)
1 Bob 7 (True, 136, 79.05)
2 Chuck 9 (True, 138, 75.0)
3 Daren 12 (True, 146, 77.25)
3 Elisa 13 (True, 146, 77.25)现在,我想过滤dataframe,只包括那些在‘分数’元组的第一个位置上带有True的条目,以获得这个数据:
name age scores
1 Bob 7 (True, 136, 79.05)
2 Chuck 9 (True, 138, 75.0)
3 Daren 12 (True, 146, 77.25)
3 Elisa 13 (True, 146, 77.25)我试过这两种方法:
df = df[df.scores[0] == True]和
df = df.drop(df[df.scores[0] == False].index)但我总是犯错误。有谁知道用元组中的值进行筛选的有效方法吗?谢谢!
发布于 2022-02-16 16:05:15
您可以尝试使用Series.str
df.loc[df.scores.str[0]==True]发布于 2022-02-16 16:00:05
错误的一个原因是因为df.score是Series,但是您正在尝试使用它,例如list或tuple (例如,分数、scores1 .)。
为这个问题编辑,@Space Impact的答案更好(更快更容易)。
相反,您可以在这里使用lambda,如下所示:
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Chuck', 'Daren', 'Elisa'],
'age': [8, 7, 9, 12, 13],
'scores': [(False, 0, 89.1), (True, 136, 79.05), (True, 138, 75.0), (True, 146, 77.25), (True, 146, 77.25)],
})
print(df)
# name age scores
#0 Alice 8 (False, 0, 89.1)
#1 Bob 7 (True, 136, 79.05)
#2 Chuck 9 (True, 138, 75.0)
#3 Daren 12 (True, 146, 77.25)
#4 Elisa 13 (True, 146, 77.25)
df2 = df[df['scores'].apply(lambda x: x[0])]
print(df2)
# name age scores
#1 Bob 7 (True, 136, 79.05)
#2 Chuck 9 (True, 138, 75.0)
#3 Daren 12 (True, 146, 77.25)
#4 Elisa 13 (True, 146, 77.25)https://stackoverflow.com/questions/71145079
复制相似问题