当前位置: 首页 > 知识库问答 >
问题:

PySpark获取具有最大日期的数据框列的值

周作人
2023-03-14

我需要在pyspark数据框中使用窗口上的max date行中的列值创建一个新列。鉴于下面的数据框架,我需要根据最近日期的调整系数为每个资产的每个记录设置一个名为max_adj_factor的新列。

+----------------+-------+----------+-----+
|adjustmentFactor|assetId|      date|  nav|
+----------------+-------+----------+-----+
|9.96288362069999|4000123|2019-12-20| 18.5|
|9.96288362069999|4000123|2019-12-23|18.67|
|9.96288362069999|4000123|2019-12-24| 18.6|
|9.96288362069999|4000123|2019-12-26|18.57|
|10.0449181987999|4000123|2019-12-27|18.46|
|10.0449181987999|4000123|2019-12-30|18.41|
|10.0449181987999|4000123|2019-12-31|18.34|
|10.0449181987999|4000123|2020-01-02|18.77|
|10.0449181987999|4000123|2020-01-03|19.07|
|10.0449181987999|4000123|2020-01-06|19.16|
|10.0449181987999|4000123|2020-01-07| 19.2|

共有1个答案

谢鸿羲
2023-03-14

您可以在Windows上使用max_by:

python prettyprint-override">df.withColumn("max_adj_factor", \
        F.expr("max_by(adjustmentFactor, date)") \
        .over(Window.partitionBy("assetId"))) \
        .show()

输出:

+----------------+-------+----------+-----+----------------+
|adjustmentFactor|assetId|      date|  nav|  max_adj_factor|
+----------------+-------+----------+-----+----------------+
|9.96288362069999|4000123|2019-12-20| 18.5|10.0449181987999|
|9.96288362069999|4000123|2019-12-23|18.67|10.0449181987999|
|9.96288362069999|4000123|2019-12-24| 18.6|10.0449181987999|
|9.96288362069999|4000123|2019-12-26|18.57|10.0449181987999|
|10.0449181987999|4000123|2019-12-27|18.46|10.0449181987999|
|10.0449181987999|4000123|2019-12-30|18.41|10.0449181987999|
|10.0449181987999|4000123|2019-12-31|18.34|10.0449181987999|
|10.0449181987999|4000123|2020-01-02|18.77|10.0449181987999|
|10.0449181987999|4000123|2020-01-03|19.07|10.0449181987999|
|10.0449181987999|4000123|2020-01-06|19.16|10.0449181987999|
|10.0449181987999|4000123|2020-01-07| 19.2|10.0449181987999|
+----------------+-------+----------+-----+----------------+
 类似资料:
  • 我有一个DenseVectors作为行的dataframe: 我想用UDF找到每一行的最大值。我就是这么做的: 文件“C:\programdata\anaconda3\envs\python2\lib\site-packages\pyspark\sql\utils.py”,第63行,deco格式返回f(*a,**kw) 文件“C:\programdata\anaconda3\envs\python

  • 问题内容: 桌子: 我想获取UserId,每个UserId的max(Date)值。即,具有最新日期的每个UserId的值。有没有一种方法可以简单地在SQL中做到这一点?(最好是Oracle) 更新: 对于任何歧义,我们深表歉意:我需要获取所有UserIds。但是对于每个UserId,仅该用户具有最新日期的那一行。 问题答案: 这将检索其my_date列值等于该用户ID的my_date最大值的所有行

  • 问题内容: 我正在处理一个Postgres表(称为“lives”),该表包含带有,和列的记录。我需要一个查询,该查询将为我提供每个usr_id的最新live_remaining总数 有多个用户(与usr_id不同) time_stamp不是唯一的标识符:有时,用户事件(表中的每一行)将使用相同的time_stamp发生。 trans_id仅在很小的时间范围内是唯一的:随着时间的流逝,它会重复 (对

  • 问题内容: 但是,即使该组中有多个具有最大值的记录,我也只需要每组一个记录。 在下面的示例中,我需要一条记录用于“ s2”。对我来说,哪一个都没关系。 问题答案: 您可以使用 设置来实现你的目标 再次更新 很抱歉误解您的意思。如果您要一个组中最大数量的组,可以先对其进行排序

  • 问题内容: 我正在尝试找出在Spark dataframe列中获得最大值的最佳方法。 考虑以下示例: 哪个创建: 我的目标是在A列中找到最大值(通过检查,这是3.0)。使用PySpark,我可以想到以下四种方法: 上面的每一个都给出了正确的答案,但是在没有Spark分析工具的情况下,我无法确定哪个是最好的。 从直觉或经验主义的观点来看,就Spark运行时或资源使用而言,上述哪种方法最有效,或者是否

  • 问题内容: 因此,我有一个包含几个列表的列表,这些列表都首先包含三个字符串,然后是一个浮点数,例如: 如何制作一个返回最大值的函数(此处为9.1931)?我试过了 但这只是给我一个清单。 编辑:此外,以任何方式我可以获取值来自何处的索引?喜欢,来自哪个子列表? 问题答案: 循环浏览外部列表,然后选择每个子列表的最后一个元素: 最好将所有与函数相关的变量保留在范围内(将列表作为参数传递,并且不要通过