3 回答

TA貢獻1801條經驗 獲得超16個贊
這似乎是一個很好的用例groupby。這里有幾個例子:
df.groupby("ID").apply(lambda df: (df.Status == 100).all())
這給出了每個 ID 的布爾狀態(tài):
ID
A True
B False
C True
D False
如果可以依賴平均值,則另一種選擇:
df.groupby("ID").mean().pipe(lambda df: df[df.Status == 100])
這給出了結果:
ID Status
A 100.0
C 100.0

TA貢獻1851條經驗 獲得超3個贊
有很多方法可以做到。
選項1
groupby()并過濾掉min==100
df.groupby('ID')['Status'].min()[lambda x:x==100].reset_index()
ID Status
0 A 100
1 C 100
選項 2 過濾IDs任何Status不等于100并index使用提取它們groupby(),filter(boolean selection)
.isin使用反向查詢drop duplicates從結果中排除選定的索引
s=df.loc[df.groupby('ID')['Status'].filter(lambda x:(x!=100).any()).index,:]
df[~df.index.isin(s.index)].drop_duplicates()
ID Status
0 A 100
4 C 100

TA貢獻1951條經驗 獲得超3個贊
考慮到變量是一種狀態(tài),我假設它只存在于 [0,100]?如果是這樣,該 ID 的最低狀態(tài)必須為 100。
import pandas as pd
df = pd.DataFrame(data= {'ID': ['A', 'A', 'B', 'B', 'C', 'D'], 'Status': [100, 100, 100, 25, 100, 34]})
df_completed=df.groupby(['ID']).min()==100 #gives True/False for each ID.
df_completed=df_completed[df == True].dropna()*100 #essentially just formatting
輸出:
Status
ID
A 100.0
C 100.0
添加回答
舉報