dataframe - 按创建日期获取不同的行
问题描述
我正在使用这样的数据框:
DeviceNumber | CreationDate | Name
1001 | 1.1.2018 | Testdevice
1001 | 30.06.2019 | Device
1002 | 1.1.2019 | Lamp
我正在使用 databricks 和 pyspark 来执行 ETL 过程。如何以每个“DeviceNumber”只有一行并且这将是“CreationDate”最高的行的方式减少数据帧?在此示例中,我希望结果如下所示:
DeviceNumber | CreationDate | Name
1001 | 30.06.2019 | Device
1002 | 1.1.2019 | Lamp
解决方案
您可以使用 DeviceNumber 创建一个额外的数据框,它是最新/最大 CreationDate。
import pyspark.sql.functions as psf
max_df = df\
.groupBy('DeviceNumber')\
.agg(psf.max('CreationDate').alias('max_CreationDate'))
然后加入max_df
原始数据框。
joining_condition = [ df.DeviceNumber == max_df.DeviceNumber, df.CreationDate == max_df.max_CreationDate ]
df.join(max_df,joining_condition,'left_semi').show()
left_semi
当您希望第二个数据帧作为查找并且确实需要来自第二个数据帧的任何列时,join 很有用。
推荐阅读
- postgresql - 如何按搜索字符串postgresql的第一个单词对查询结果进行排序?
- memory - 如何使用 PIN 工具获取特定函数调用的内存 rd/wr 跟踪
- python - 取模型预测关于输入的导数
- python - 如何将数据库中的值插入到我的条目中?特金特
- javascript - 如何检查 args 的数量
- python - Yahoo Finance (Python) 库在本地机器上的 Volume 中为我提供了奇怪的值
- bootstrap-4 - 为什么 gulp build 将 Bootstrap 容器 css 属性 px 转换为 pt?
- php - Symfony 验证错误:preg_match():编译失败:偏移处的字符类范围乱序
- sql - 创建多语句用户定义函数时,BEGIN 附近的语法不正确
- java - 如何避免 json 对象的字符串值中的 javascript 注入以及 javascript 注入包含在 java 中的哪个列/属性?