当 pyspark 中的值低于最小阈值时,如何找到最大和最小时间戳?

问题描述 投票:0回答:1

我有一张如下表-

时间_秒 价值
1 4.5
2 4
3 3
4 5
5 6
6 7
7 6
8 5
9 4.5
10 4.2
11 3
12 3.5

我想找到该值低于 5 时的最短时间和最长时间。

预期产出-

时间_秒 价值 分钟_时间 最大时间
1 4.5 1 3
2 4 1 3
3 3 1 3
4 5
5 6
6 7
7 6
8 5
9 4.5 9 12
10 4.2 9 12
11 3 9 12
12 3.5 9 12

到目前为止,我已经过滤掉了低于 5 的值,并找到了最小值和最大值,这分别给了我 1 和 12 的值。我想知道是否有什么方法可以将它们分组以找到预期的结果。

使用的代码 -

df1=df.filter(col('value')<5)
df1=(df1.withColumn('min_time',min(col('time_in_seconds'))
        .withColumn('max_time',max(col('time_in_seconds')))
df=df.join(df1,['time_in_seconds','value'],'left')
python pandas pyspark apache-spark-sql pyspark-transformer
1个回答
0
投票

在 Pandas 中你可以这样做:

data = {
    "time_is_seconds": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
    "value": [4.5, 4, 3, 5, 6, 7, 6, 5, 4.5, 4.2, 3, 3.5],
}

df = pd.DataFrame(data)

m = df["value"].lt(5)
g = m.ne(m.shift(1)).cumsum()

df.loc[m, "min_time"] = df.groupby(g)["time_is_seconds"].transform(min)
df.loc[m, "max_time"] = df.groupby(g)["time_is_seconds"].transform(max)
    time_is_seconds  value  min_time  max_time
0                 1    4.5       1.0       3.0
1                 2    4.0       1.0       3.0
2                 3    3.0       1.0       3.0
3                 4    5.0       NaN       NaN
4                 5    6.0       NaN       NaN
5                 6    7.0       NaN       NaN
6                 7    6.0       NaN       NaN
7                 8    5.0       NaN       NaN
8                 9    4.5       9.0      12.0
9                10    4.2       9.0      12.0
10               11    3.0       9.0      12.0
11               12    3.5       9.0      12.0

我没有 Pyspark 的经验,但如果您遵循相同的逻辑,这也许会对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.