亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據多個條件從 Pandas DataFrame 中隨機選擇行

根據多個條件從 Pandas DataFrame 中隨機選擇行

翻過高山走不出你 2023-09-19 14:46:47
我正在嘗試使用 Python 來對 QA 進行數據采樣。我的標準是審核 2 個人,然后根據風險級別對其各自的供應商進行隨機抽樣。所以我需要一個腳本,基本上是這樣的:如果或當 PM 所有者是 Alex 時,則隨機選擇嚴重風險、高風險、中風險和低風險各 1 個(只要存在 1 個)。WHILE df['PM Owner'] == 'Alex':     IF df['Risk Tier'] == 'Critical':         df['Risk Tier'].sample()我收到此錯誤:The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()`然后我需要為另一個人重復這個循環。我已經嘗試過if循環while但沒有獲得我需要的成功。我的專欄是'PM Owner'和'Risk Tier'。
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

我不確定我的問題是否正確,但至少這個答案會幫助其他人給你答案如果這不是你要找的,請給我機會


import pandas as pd

#your dataframe  

maindf = {'PM Owner': ['A', 'B','C','A','E','F'], 'Risk Tier': [1,3,1,1,1,2],'sam' :['A0','B0','C0','D0','E0','F0']}

Maindf = pd.DataFrame(data=maindf)

 


#what you are looking for

filterdf = {'PM Owner': ['A'  ], 'Risk Tier': [ 1 ]}

Filterdf = pd.DataFrame(data=filterdf)


 

#Filtering

NewMaindf= (Maindf[Maindf[['PM Owner','Risk Tier']].astype(str).sum(axis = 1).isin(

                Filterdf[['PM Owner','Risk Tier']].astype(str).sum(axis = 1))])

#Just one sample

print( (NewMaindf).sample())

#whole dataset after filtering

print( (NewMaindf) )

結果 :


 PM Owner  Risk Tier sam

3        A          1  D0

  PM Owner  Risk Tier sam

0        A          1  A0

3        A          1  D0


查看完整回答
反對 回復 2023-09-19
?
30秒到達戰場

TA貢獻1828條經驗 獲得超6個贊

您指定的條件可以匹配許多行,這就是您收到錯誤的原因,同時建議您使用將結果減少為單個值的函數之一。然而,目前形式的條件實際上可以用作掩模,因此只需縮小范圍即可抽取符合標準的樣本,即:

df.loc[(df['PM Owner'] == 'Alex') & (df['Risk Tier'] == 'Critical'), 'Risk Tier'].sample()

如果您需要循環遍歷每個 PM 所有者,您可以這樣做:

for pm_owner in df['PM Owner']:
    sample = df.loc[(df['PM Owner'] == pm_owner) & (df['Risk Tier'] == 'Critical'), 'Risk Tier'].sample()



查看完整回答
反對 回復 2023-09-19
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號