python 如何按列中值顺序按时间戳分组?

hgc7kmma  于 2023-03-21  发布在  Python
关注(0)|答案(1)|浏览(93)

你好我有一个这样的表下面
| 项目名称|项目值|时间戳|
| - ------|- ------|- ------|
| hpc_max|0.25|2023-03-01T17:20:00.000+0000|
| 资产最小值|0.34|2023-03-01T17:20:00.000+0000|
| 偏离中线|0.30|2023-03-01T17:30:00.000+0000|
| hpc_max|0.54|2023-03-01T17:30:00.000+0000|
| 资产最小值|0.32|2023-03-01T17:35:00.000+0000|
| 偏离中线|0.67|2023-03-01T17:20:00.000+0000|
| 资产最小值|0.54|2023-03-01T17:30:00.000+0000|
| 偏离中线|0.32|2023-03-01T17:35:00.000+0000|
| hpc_max|0.67|2023-03-01T17:35:00.000+0000|
我使用下面的命令按时间戳对item_values进行分组

grouped_df = (
    df.groupBy("timestamp")
    .agg(sort_array(collect_list("item_values")).alias("item_values"))
)

result = [row["item_values"] for row in grouped_df.sort("timestamp").collect()]

返回的输出是这样的

[[10.046214032028468,
  10.112576620155044,
  23.68193075],
 [10.046214032028468,
  10.112576620155044,
  23.660212571428573]]

但我希望这些值按照item_names(资产_最小值、hpc_最大值、off_median)的顺序排列
如何使用pyspark?
将非常感谢您的帮助!

mtb9vblg

mtb9vblg1#

这是可行的:

w=Window.partitionBy("timestamp").orderBy("item_name").rowsBetween(Window.unboundedPreceding, Window.unboundedFollowing)

df.select(F.collect_list("item_value").over(w).alias("item_values"), F.col("timestamp"))\
.groupBy("timestamp")\
.agg(F.first("item_values").alias("item_values"))\
.show(truncate=False)

输入:

+----------+----------+----------------------------+
|item_name |item_value|timestamp                   |
+----------+----------+----------------------------+
|hpc_max   |0.25      |2023-03-01T17:20:00.000+0000|
|asset_min |0.34      |2023-03-01T17:20:00.000+0000|
|off_median|0.3       |2023-03-01T17:30:00.000+0000|
|hpc_max   |0.54      |2023-03-01T17:30:00.000+0000|
|asset_min |0.32      |2023-03-01T17:35:00.000+0000|
|off_median|0.67      |2023-03-01T17:20:00.000+0000|
|hpc_max   |0.54      |2023-03-01T17:30:00.000+0000|
|asset_min |0.32      |2023-03-01T17:35:00.000+0000|
|off_median|0.67      |2023-03-01T17:35:00.000+0000|
+----------+----------+----------------------------+

输出:

+----------------------------+------------------+
|timestamp                   |item_values       |
+----------------------------+------------------+
|2023-03-01T17:20:00.000+0000|[0.34, 0.25, 0.67]|
|2023-03-01T17:30:00.000+0000|[0.54, 0.54, 0.3] |
|2023-03-01T17:35:00.000+0000|[0.32, 0.32, 0.67]|
+----------------------------+------------------+

相关问题