我有一个像这样的数据框:
----------------------------------------------
| User_ID | Timestamp | Article_ID |
----------------------------------------------
| 121212 | 2018-01-15 10:00:00 | 1 |
| 121212 | 2018-01-15 10:05:00 | 11 |
| 121212 | 2018-01-15 10:10:00 | 12 |
| 989898 | 2018-01-15 17:30:00 | 100 |
| 989898 | 2018-01-15 17:40:00 | 200 |
| 989898 | 2018-01-15 17:50:00 | 1 |
| 989898 | 2018-01-15 17:55:00 | 11 |
|... | | |
----------------------------------------------
现在我想要每个 User_ID 具有最小时间戳的行。 结果应该是:
----------------------------------------------
| User_ID | Timestamp | Article_ID |
----------------------------------------------
| 121212 | 2018-01-15 10:00:00 | 1 |
| 989898 | 2018-01-15 17:30:00 | 100 |
|... | | |
----------------------------------------------
我尝试了以下方法:
df.groupBy('User_ID').agg(F.min('Timestamp')).show()
这还不错,但是缺少“Article_ID”列... 有人可以帮我吗?
最佳答案
我找到了一个使用函数 struct() 的工作解决方案:
df.select('User_ID',F.struct('Timestamp','Article_ID').alias("TA")).groupBy('User_ID').agg(F.min("TA").alias("TA")).select('User_ID','TA.Timestamp','TA.Article_ID').orderBy('User_ID').limit(10).toPandas()
关于python - Pyspark/Python - 使用 MIN/MAX 而不丢失列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270789/