python - 尝试使用具有多个条件的 pyspark 创建新列
问题描述
我有一个数据集,在那个数据集中我有 X 和 Y 列
X.dtype : 时间戳
Y.dtype:字符串
我想制作一个具有唯一 Y 列值的计数值的 Z 列。但它必须在每行的 X 时间列之前计算。
示例数据集:
X | 是 |
---|---|
2021-09-08 | 1号 |
2021-09-09 | 2号 |
2021-09-10 | 2号 |
2021-09-11 | 编号3 |
2021-09-12 | 2号 |
2021-09-13 | 2号 |
2021-09-14 | 编号3 |
示例结果数据集:
X | 是 | Z |
---|---|---|
2021-09-08 | 1号 | 0 |
2021-09-09 | 2号 | 0 |
2021-09-10 | 2号 | 1 |
2021-09-11 | 编号3 | 0 |
2021-09-12 | 2号 | 2 |
2021-09-13 | 2号 | 3 |
2021-09-14 | 编号3 | 1 |
注意:X 列未在原始数据集上排序,我不想对 X 列进行排序。
解决方案
你可以这样做row_number
:
from pyspark.sql import functions as F, Window
df.withColumn(
"z",
F.row_number().over(Window.partitionBy("y").orderBy("x")) - 1
).show()
推荐阅读
- c# - 在 Datastax CassandraCSharpDriver.Graph 中向现有顶点添加新顶点和边,但出现边 OUT 错误
- django - django如何在导出到csv之前过滤数据
- c# - 正在使用的多播侦听器端口
- sql - SQL 为 EXEC 存储过程提供另一个带有撇号参数的存储过程
- php - php默认从url获取id
- java - 如何使用 Mockito 在另一个方法中调用一个方法
- php - 放置文件时 created_at/updated_at 为空
- swift - 如何使用 Pods 为 xcode 项目创建存储库?
- rabbitmq - 如何用多条消息回复 RabbitMQ RPC 客户端?
- angular - 如何让 Angular 应用程序与 Cloudflare Workers - Workers Sites 一起使用