【问题标题】:Create new column based on values in 300 adjacent rows of another column pandas根据另一列 pandas 的 300 个相邻行中的值创建新列
【发布时间】: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 ... ...

希望这可以澄清!

【问题讨论】:

  • 你能用你的预期输出显示一些示例数据吗?我认为您可以使用简单的布尔掩码来实现这一点,但需要确定您的数据。
  • 当然!刚刚编辑了我的帖子。

标签: python pandas


【解决方案1】:

我不是 100% 确定我理解你的问题,但是“怎么样”

(df['EDA'] == 0).rolling(300).sum().shift(-299) == 300

基本上你正在做的是构造一个系列,如果值为零,则为 1,否则为 0。

然后,您正在计算窗口为 300 的滚动总和,并将其向后移动 299 个点。当且仅当该值和接下来的 299(因此总共 300)都为零时,这将导致值为 300。

为了看一个简单的例子,让我们考虑一个更简单的情况,如果一行中有 3 个零,则要删除

让我们考虑

 ser = pd.Series([1, 0, 0, 0, 1, 0])

如果我们这样做

 ser1 = ser == 0

我们得到

0    False
1     True
2     True
3     True
4    False
5     True

在做

 ser2 = ser1.rolling(3).sum()

我们得到

0    NaN
1    NaN
2    2.0
3    3.0
4    2.0
5    2.0

终于搞定了

ser2.shift(-2) == 3

我们得到

0    False
1     True
2    False
3    False
4    False
5    False

我相信这应该给我们正确的答案,因为我们想要一个 True 值当且仅当连续三个 0 时,这里唯一的 True 值是正确的索引 1

【讨论】:

    猜你喜欢
    • 2020-04-16
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2023-01-04
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多