【发布时间】:2019-03-29 17:44:34
【问题描述】:
我有一些典型的股票数据。我想创建一个名为“Volume_Count”的列,它将计算每季度 0 卷天数。我的最终目标是在一个季度中删除所有 0 交易量超过 5 天的股票。通过创建此列,我可以编写一个简单的语句来设置 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)
但是,如前所述,这会产生不一致的结果。
我只想从数据集中删除交易量 == 0 持续 5 天或更长时间的季度的股票。
注意:我的数据集中有多个 Stocks 和 Qtr,因此 groupby Qtr, Stock 是必不可少的。
期望的输出: 我想保留数据集,但如果 qtr 的任何股票的数量 = 0 > 5 天,则删除它们。这可能意味着 2019 年第一季度的股票不在数据集中(因为 Vol == 0 > 5 天)但是在 2019 年第二季度进入 df(Vol == 0
【问题讨论】:
-
想要的结果是什么。
-
更新了我的问题。 @pygo
-
@busybear 谢谢你的评论,你说得对,我的原始代码中有正确的不等式,只是在这里写错了。
-
我认为您只需将不等式的方向更改为小于 5。您希望过滤器的值对于要保留的记录返回 True。因此,对于传递到
filter的每个组,您检查条件,如果结果评估为 True,它将保留该组中的所有记录。