为了账号安全,请及时绑定邮箱和手机立即绑定

根据多个条件从 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 关注
  • 59 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信