根据多个条件从 Pandas DataFrame 中随机选择行

我正在尝试使用 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'


翻过高山走不出你
浏览 109回答 2
2回答

慕标琳琳

我不确定我的问题是否正确,但至少这个答案会帮助其他人给你答案如果这不是你要找的,请给我机会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 forfilterdf = {'PM Owner': ['A'  ], 'Risk Tier': [ 1 ]}Filterdf = pd.DataFrame(data=filterdf) #FilteringNewMaindf= (Maindf[Maindf[['PM Owner','Risk Tier']].astype(str).sum(axis = 1).isin(                Filterdf[['PM Owner','Risk Tier']].astype(str).sum(axis = 1))])#Just one sampleprint( (NewMaindf).sample())#whole dataset after filteringprint( (NewMaindf) )结果 : PM Owner  Risk Tier sam3        A          1  D0  PM Owner  Risk Tier sam0        A          1  A03        A          1  D0

30秒到达战场

您指定的条件可以匹配许多行,这就是您收到错误的原因,同时建议您使用将结果减少为单个值的函数之一。然而,目前形式的条件实际上可以用作掩模,因此只需缩小范围即可抽取符合标准的样本,即: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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python