考慮這個資料框:
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)
現在,我想過濾資料框以僅包含那些在“分數”元組的第一個位置為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)
但我不斷收到錯誤。有誰知道在元組中按值過濾的有效方法?謝謝!
uj5u.com熱心網友回復:
您可以嘗試使用Series.str:
df.loc[df.scores.str[0]==True]
uj5u.com熱心網友回復:
錯誤的一個原因是因為 df.score 是Series,但您正在嘗試使用它,例如listor tuple(例如,scores[0]、scores[1] ...)。
[已編輯] 對于這個問題,@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://www.uj5u.com/ruanti/424760.html
