[英]how to groupby-apply-aggregate back to a dataframe in Python Pandas?
[英]How to apply groupBy and aggregate functions to a specific window in a PySpark DataFrame?
我想將groupBy
和隨后的agg
function 應用於 PySpark DataFrame,但僅限於特定的 Z2FBF245B8C35CBD276。 這最好用一個例子來說明。 假設我有一個名為df
的數據集:
df.show()
+-----+----------+----------+-------+
| ID| Timestamp| Condition| Value|
+-----+----------+----------+-------+
| z1| 1| 0| 50|
|-------------------------------------------|
| | z1| 2| 0| 51| |
| | z1| 3| 0| 52| |
| | z1| 4| 0| 51| |
| | z1| 5| 1| 51| |
| | z1| 6| 0| 49| |
| | z1| 7| 0| 44| |
| | z1| 8| 0| 46| |
|-------------------------------------------|
| z1| 9| 0| 48|
| z1| 10| 0| 42|
+-----+----------+----------+-------+
特別是,我想做的是將一種 +- 3 行的 window 應用於列Condition == 1
的行(即在這種情況下為第 5 行)。 在那個 window 中,如上面的 DataFrame 所示,我想找到列Value
的最小值和列Timestamp
的對應值,從而得到:
+----------+----------+
| Min_value| Timestamp|
+----------+----------+
| 44| 7|
+----------+----------+
有誰知道如何解決這個問題?
提前謝謝了
馬里安薩斯
您可以使用跨越前 3 行和后 3 行的 window,獲取最小值並過濾條件:
from pyspark.sql import functions as F, Window
df2 = df.withColumn(
'min',
F.min(
F.struct('Value', 'Timestamp')
).over(Window.partitionBy('ID').orderBy('Timestamp').rowsBetween(-3,3))
).filter('Condition = 1').select('min.*')
df2.show()
+-----+---------+
|Value|Timestamp|
+-----+---------+
| 44| 7|
+-----+---------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.