我有一些典型的库存数据。我想创建一个名为“ Volume_Count”的列,该列将计算每个季度0个交易日的数量。我的最终目标是在一个季度内删除所有交易量超过5天且数量为0的股票。通过创建此列,我可以为Vol_Count> 5子集编写一个简单的语句。

典型的数据集:

Stock     Date      Qtr     Volume
 XYZ     1/1/19   2019 Q1     0
 XYZ     1/2/19   2019 Q1     598
 XYZ     1/3/19   2019 Q1     0
 XYZ     1/4/19   2019 Q1     0
 XYZ     1/5/19   2019 Q1     0
 XYZ     1/6/19   2019 Q1     2195
 XYZ     1/7/19   2019 Q1     0
 ... ... and so on (for multiple stocks and quarters)


这就是我尝试过的-1班轮-

df = df.groupby(['stock','Qtr'], as_index=False).filter(lambda x: len(x.Volume == 0) > 5)


但是,如前所述,这产生了不一致的结果。

我只想从数据集中删除库存,该季度的数量为5天或更长时间== 0。

注意:我的数据集中有多个Stock和Qtr,因此对Qtr,Stock进行分组非常重要。

所需输出:
我想保留数据集,但如果数量大于5天的交易量= 0则删除qtr的所有股票..这可能意味着2019年第一季度不在数据集中的股票(因为交易量== 0> 5天)但是在2019年第二季度进入DF(Vol == 0

最佳答案

尝试这个:

df[df['Volume'].eq(0).groupby([df['Stock'],df['Qtr']]).transform('sum') < 5]


细节。


首先获取数据框的“音量”列,然后查看是否
每个记录为零。
接下来,将该列按“ Stock”和“ Qtr”列分组,并从步骤1中获得每个True值的总和,并使用groupbytransform将该总和分配给每个记录。
根据该总和创建布尔序列,如果小于5,则为True,并且
使用该系列对原始数据框进行布尔索引。

08-25 03:15