gpt4 book ai didi

python - 如何在数据帧上隔离具有异常值的周期

转载 作者:行者123 更新时间:2023-12-01 06:29:25 24 4
gpt4 key购买 nike

所以我有一个如下所示的数据框:

    id      epoch                      value    duration
958 1819 2018-01-01 00:00:00.000 1 20
959 1820 2018-01-01 00:20:00.000 2 20
960 1821 2018-01-01 00:40:00.000 3 20
961 1822 2018-01-01 01:00:00.000 4 20
962 1823 2018-01-01 01:20:00.000 5 20
963 1824 2018-01-01 01:20:01.000 5.05 0.01
964 1825 2018-01-01 01:40:01.000 6 20
965 1826 2018-01-01 02:00:01.000 7 20
966 1827 2018-01-01 02:00:02.000 7.0012 0.01
967 1828 2018-01-01 02:20:02.000 8 20

正如您所看到的,我们有 3 个周期的值,我想通过忽略持续时间非常短的“异常值”(但不删除该行)来对新列中的周期进行计数。

这是我所拥有的:

    id      epoch                      value    duration    period
958 1819 2018-01-01 00:00:00.000 1 20 1
959 1820 2018-01-01 00:20:00.000 2 20 2
960 1821 2018-01-01 00:40:00.000 3 20 3
961 1822 2018-01-01 01:00:00.000 4 20 1
962 1823 2018-01-01 01:20:00.000 5 20 2
963 1824 2018-01-01 01:20:01.000 5.05 0.01 3
964 1825 2018-01-01 01:40:00.000 6 20 1
965 1826 2018-01-01 02:00:01.000 7 20 2
966 1827 2018-01-01 02:00:02.000 7.0012 0.01 3
967 1828 2018-01-01 02:20:02.000 8 20 1

这就是我想要的:

    id      epoch                      value    duration    period
958 1819 2018-01-01 00:00:00.000 1 20 1
959 1820 2018-01-01 00:20:00.000 2 20 2
960 1821 2018-01-01 00:40:00.000 3 20 3
961 1822 2018-01-01 01:00:00.000 4 20 1
962 1823 2018-01-01 01:20:00.000 5 20 2
963 1824 2018-01-01 01:20:01.000 5.05 0.01 2
964 1825 2018-01-01 01:40:00.000 6 20 3
965 1826 2018-01-01 02:00:01.000 7 20 1
966 1827 2018-01-01 02:00:02.000 7.0012 0.01 1
967 1828 2018-01-01 02:20:02.000 8 20 2

我已经用 2 个 for 循环完成了此操作,但由于数据帧很大,我正在寻找一种更快的方法来完成此操作。

提前致谢

编辑:我又添加了几行。更清楚地说:有些点是“重复的”(它们的值与前一个点几乎相同),我需要将它们放在与其双倍相同的时期内。另外,我无法删除它们(也许是暂时的?),我需要将它们放在最终的数据框中。

最佳答案

根据您提供的数据,这是一个快速解决方案,比使用 for 快得多,并且考虑到预期输出,使用 np.where():

import pandas as pd
import numpy as np
d = {'value':[1,2,3,4,5,5.05,6],'dur':[20,20,20,20,20,0.01,20],'period':[1,2,3,1,2,3,1]}
df = pd.DataFrame(d)
df['period'] = np.where(df['dur']-df['dur'].astype(int) == 0,df['period'],df['period']-1)
print(df)

输出:

   value    dur  period  aux
0 1.00 20.00 1 1
1 2.00 20.00 2 2
2 3.00 20.00 3 3
3 4.00 20.00 1 1
4 5.00 20.00 2 2
5 5.05 0.01 3 2
6 6.00 20.00 1 1

关于python - 如何在数据帧上隔离具有异常值的周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59977285/

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