gpt4 book ai didi

python - 根据另一列 pandas 的 300 个相邻行中的值创建新列

转载 作者:行者123 更新时间:2023-12-01 00:41:05 26 4
gpt4 key购买 nike

我想在我的数据框中创建一个新的列 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<br/>
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<br/>
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
... ...

希望这能澄清!

最佳答案

不能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

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

关于python - 根据另一列 pandas 的 300 个相邻行中的值创建新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com