【发布时间】:2019-08-04 05:50:37
【问题描述】:
我想在我的数据框中创建一个新的 y 列,如果我的数据框的 x 列中相应行的下 300 行都为 0,则为 True,否则为 False(这样我就可以删除所有具有y = 真)。我这样做的理由是,我只想删除我的数据框中在 x 列中连续有 300 个 0 的所有行。
我的数据集中有大约 150,000 行,因此遍历所有行太慢了。有没有更快的方法来做到这一点?
我尝试遍历所有行,这太慢了。我也尝试过类似
for i in range(len(final_agg_df.index)):
final_agg_df["to_delete"][i] = (final_agg_df["EDA"].iloc([[i, i+300]]) == 0).all()
final_agg_df = final_agg_df[final_agg_df["to_delete"]==False]
这似乎不起作用(我收到错误 TypeError: unhashable type: 'list'),我也不确定这是否是最快的方法。谢谢!
编辑:
我的示例数据将有一个时间戳作为索引,有很多列,其中一个是“EDA”,该列确定我是否要连续删除我的数据。
index EDA
4/8/2019 9:20 3
4/8/2019 9:21 2
4/8/2019 9:22 0
4/8/2019 9:23 1
4/8/2019 9:24 0
4/8/2019 9:25 0
4/8/2019 9:26 0
... ...
在这里,从 2019 年 4 月 8 日 9:24 开始,连续 3 行 EDA = 0。如果一行中有 300 行,我想删除索引为 4/8/2019 9:24 的整行。为此,如果我的行应该被删除,我首先想要一个“True”的新列,所以像这样:
index EDA to_delete
4/8/2019 9:20 3 False
4/8/2019 9:21 2 False
4/8/2019 9:22 0 False
4/8/2019 9:23 1 False
4/8/2019 9:24 0 True
4/8/2019 9:25 0 False
4/8/2019 9:26 0 False
... ...
希望这可以澄清!
【问题讨论】:
-
你能用你的预期输出显示一些示例数据吗?我认为您可以使用简单的布尔掩码来实现这一点,但需要确定您的数据。
-
当然!刚刚编辑了我的帖子。