我有一些典型的库存数据。我想创建一个名为“ 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值的总和,并使用
groupby
和transform
将该总和分配给每个记录。根据该总和创建布尔序列,如果小于5,则为True,并且
使用该系列对原始数据框进行布尔索引。