【问题标题】:How to do filtering based on logics using pandas group by如何使用 pandas group by 进行基于逻辑的过滤
【发布时间】:2023-03-12 22:50:02
【问题描述】:

我有一个数据框

df = pd.DataFrame({'Id' : [1, 1, 2,2, 3,3], 
               'Qty' : [4,4,8,8,5,5], 
               'Vendor Price' : [23,43, 100, 40, 1000, 1400],
               'Qty Avail' :[0, 8, 2, 8, 0, 8]})

Out[159]: 
     Id  Qty  Vendor Price  Qty Avail
 0   1    4            23          0
 1   1    4            43          8
 2   2    8           100          2
 3   2    8            40          8
 4   3    5          1000          0
 5   3    5          1400          8

我想应用 if group by Id, Qty Avail 的逻辑

 Id  Qty  Vendor Price  Qty Avail
 1    4            23          0
 2    8            40          8
 3    5          1000          0

我无法理解这样做的逻辑。请帮忙。

【问题讨论】:

    标签: python-3.x pandas group-by


    【解决方案1】:

    据我了解,使用这个:

    m=df.groupby(['Id','Qty'])['Qty Avail'].agg(['first','last']).reset_index()
    m['Qty Avail']=np.where((m.Qty.gt(m['first']))&(m.Qty.lt(m['last'])),m['first'],m['last'])
    df.merge(m[['Id','Qty Avail']],on=['Id','Qty Avail'])
    
       Id  Qty  Vendor Price  Qty Avail
    0   1    4            23          0
    1   2    8            40          8
    2   3    5          1000          0
    

    【讨论】:

      【解决方案2】:

      首先,您的逻辑没有多大意义,因为每个 id 有多个可用数量。因此,首先分组意味着您无法直接解决给定 ID 的 Qty

      也就是说,您的派生输出似乎希望您在 qty >= qty 可用的那些中选择最小的供应商价格和最大的可用数量。

      如果是这种情况,你可以使用

      df1 = df.loc[df['Qty'] >= df['Qty Avail'] ,['Id','Qty','Vendor Price']].groupby(['Id', 'Qty']).min()
      
      df2 = df.loc[df['Qty'] >= df['Qty Avail'] ,['Id','Qty','Qty Avail']].groupby(['Id', 'Qty']).max()
      

      然后在 id 上加入这些

      df3 = pd.merge(df1, df2, left_index = True, right_index = True)
      

      【讨论】:

      • 感谢您的帮助。在所有其他条件下都可以正常工作。
      • 我在回答中编辑了我认为是错误的内容,却发现未经编辑的版本按预期工作。有谁知道如何将我的答案恢复到预先编辑的版本?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多