获取数据框列中列表的最后一个元素

我的 Spark 数据框由 3 列组成,每一列都是列表。每行列表的长度可能会有所不同。例如我的数据框看起来像

https://img1.sycdn.imooc.com/6572dfd800012e9e02840141.jpg

我希望能够获得这些列表的最后一个元素。预期产出

https://img1.sycdn.imooc.com/6572dfef0001408e04800142.jpg

有一篇文章使用 df = df.withColumn("First_item_Col1",df['Col1'][0]) 获取列表的第一个元素

但是当我使用 -1 来获取上一行中的最后一项时,它给了我空值


忽然笑
浏览 60回答 2
2回答

慕仙森

您可以将 lambda 函数应用于 Col1 和 Col2 并获取最后一项,如下所示:df['Last_Col1']=df['Col1'].apply(lambda x: x[-1])df['Last_Col2']=df['Col2'].apply(lambda x: x[-1])输出:>>> print(df)           Col1          Col2 Last_Col1 Last_Col20        [X, X]        [A, B]         X         B1           [Y]           [B]         Y         B2     [X, Y, Z]        [A, C]         Z         C3  [X, Y, Y, Z]  [A, B, B, C]         Z         C

陪伴而非守候

您可以使用 Spark 高阶函数 - element_at 来从列表列中获取最后一个元素,如下所示创建数据框df = spark.createDataFrame([(1,['x','x']),(2,['y']),(3,['x','y','z']),(4,['x','y','y','z'])],[ "col1","col2"])df.show(truncate=False)+----+------------+|col1|col2        |+----+------------+|1   |[x, x]      ||2   |[y]         ||3   |[x, y, z]   ||4   |[x, y, y, z]|+----+------------+解决方案df = df.withColumn("list_col", F.element_at(F.col('col2'), -1).alias('1st_from_end'))df.show(truncate=False)+----+------------+--------+|col1|col2        |list_col|+----+------------+--------+|1   |[x, x]      |x       ||2   |[y]         |y       ||3   |[x, y, z]   |z       ||4   |[x, y, y, z]|z       |+----+------------+--------+
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python