如何在条件满足之前用 N 行中的一些对条件行进行子集化,比我的代码更快?

Posted

技术标签:

【中文标题】如何在条件满足之前用 N 行中的一些对条件行进行子集化,比我的代码更快?【英文标题】:How to subset row of condition with some of N rows before the condition meet , more faster than my code? 【发布时间】:2019-10-02 01:26:00 【问题描述】:

由于我的数据集是时间序列,我有 30 个不同的数据框,每个数据框有超过 10,000 行。我想检查一下,温度值低于 40 之前的趋势。

所以,我想在温度值低于 40 时对行进行子集化,并且我还想在值低于 40 之前对 24 行进行子集化。

我已经尝试了一些代码,唯一有效的代码如下。但是子集化需要更长的时间(比如一个数据帧超过 10 分钟)。所以,我的代码很糟糕。所以我想知道python中可以更快地进行子集化的代码。你们能帮帮我吗?

df=temperature_df.copy()
drop_temperature_df=pd.DataFrame()

# get the index during drop temperature
drop_temperature_index=np.array(df[df[temperature]<40].index)

# subset the data frame for 24 hours before drop temperature
for i,index in enumerate(drop_temperature_index):
    drop_temperature_df=drop_temperature_df.append(df.loc[index-24:index,:])

K['K_'.format(string)]=drop_temperature_df.copy() #save the subset data frame

就像下面的数据, 我在 2018 年 1 月 26 日 0800 的温度点低于 40 所以,我想将低于 40 的点在 24 行之前(2018 年 1 月 25 日 0800 至 2018 年 1 月 26 日 0800)进行子集化。

【问题讨论】:

您能否向我们展示您的数据输入和输出示例 我已经编辑了我的帖子,您可以点击链接查看我的虚拟数据框。 【参考方案1】:

我认为你可以使用 ffilllimit ,找到 notnull index ,切片数据帧

yourdf=df[df.temperature.where(df.temperature<40).bfill(limit=24).notnull()].copy()

【讨论】:

@AIMIAZIMAH yw :-) 但请注意,这不会产生重复的行,例如,如果您有 24 范围内的两个值,都小于 40,则不会产生 48 行。 . 是的,就像我想要的那样。因为我的数据是时间序列。我不想有重复的时间索引。谢谢 @AIMIAZIMAH 啊哈,那很适合你的情况,祝你编码愉快 是的。你的代码更快,我的所有数据框只需要一分钟。谢谢!

以上是关于如何在条件满足之前用 N 行中的一些对条件行进行子集化,比我的代码更快?的主要内容,如果未能解决你的问题,请参考以下文章

如何在C语言中通过查看行中的一个属性对文件的行进行排序?

如何在Python中对满足某些条件的行进行子集[重复]

如果if条件满足,如何跳转到for循环中的特定位置?

在匹配选择条件的行之前选择 n 行

在满足条件之前返回行值的排序行的火花聚合

计算机程序的思维逻辑 - 条件执行的本质