【问题标题】:Randomly select rows from Pandas DataFrame based on multiple criteria根据多个条件从 Pandas DataFrame 中随机选择行
【发布时间】:2020-09-29 15:13:22
【问题描述】:

我正在尝试使用 Python 对 QA 进行数据采样。我的标准是审核 2 个人,然后根据风险级别对他们各自的供应商进行随机抽样。所以我需要一个基本上说的脚本:

如果 PM Owner 是 Alex,则随机选择 1 个(只要存在 1 个)Critical Risk、High Risk、Medium Risk 和 Low Risk。

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()`

然后我需要为另一个人重复循环。

我尝试了ifwhile 循环,但没有成功。

我的专栏是'PM Owner''Risk Tier'

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    我不确定我的问题是否正确,但至少这个答案会帮助其他人给你一个答案 如果这不是你要找的,请给我拍

    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
    

    【讨论】:

      【解决方案2】:

      您指定的条件可以匹配许多行,这就是为什么您收到错误还建议您使用将结果减少为单个值的函数之一。然而,目前形式的条件实际上可以用作掩码,因此可以通过缩小范围来抽取符合条件的样本,即:

      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()
      

      【讨论】:

        猜你喜欢
        • 2017-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多