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

使用上一行的值向dataframe添加新列

濮阳俊明
2023-03-14

初始数据流:

+--+---+
|id|num|
+--+---+
|4 |9.0|
+--+---+
|3 |7.0|
+--+---+
|2 |3.0|
+--+---+
|1 |5.0|
+--+---+

产生的数据frame:

+--+---+-------+
|id|num|new_Col|
+--+---+-------+
|4 |9.0|  7.0  |
+--+---+-------+
|3 |7.0|  3.0  |
+--+---+-------+
|2 |3.0|  5.0  |
+--+---+-------+

我通常通过使用以下内容将新列“追加”到dataframe:df.withcolumn(“new_col”,df.num*10)

共有1个答案

左丘季
2023-03-14

您可以使用lag窗口函数,如下所示

from pyspark.sql.functions import lag, col
from pyspark.sql.window import Window

df = sc.parallelize([(4, 9.0), (3, 7.0), (2, 3.0), (1, 5.0)]).toDF(["id", "num"])
w = Window().partitionBy().orderBy(col("id"))
df.select("*", lag("num").over(w).alias("new_col")).na.drop().show()

## +---+---+-------+
## | id|num|new_col|
## +---+---+-------|
## |  2|3.0|    5.0|
## |  3|7.0|    3.0|
## |  4|9.0|    7.0|
## +---+---+-------+

但有一些重要的问题:

  1. 如果需要全局操作(不被其他列/列分区),效率极低。
  2. 您需要一种自然的方式来排序您的数据。
    null
    null
 类似资料:
  • 问题内容: 我了解pandas旨在加载完全填充的内容,但是我需要创建一个空的DataFrame然后逐行添加行。做这个的最好方式是什么 ? 我成功创建了一个空的DataFrame: 然后,我可以添加新行,并用以下字段填充字段: 它有效,但看起来很奇怪:(添加字符串值失败) 如何将新行添加到DataFrame(具有不同的列类型)? 问题答案:

  • 问题内容: 我想知道是否有一种等效的方法将行添加到具有MultiIndex的Series或DataFrame中,就像使用单个索引一样,即使用.ix还是.loc? 我以为自然的方式就像 但这会引发KeyError。我知道我可以使用.append(),但使用.ix []或.loc []会更整洁。 这里有个例子: 问题答案: 您必须指定一个元组才能使多索引工作(并且您必须完全指定所有轴,例如必需) 但是

  • 那么,如何使用PySpark向现有的DataFrame添加一个新列(基于Python vector)呢?

  • 本文向大家介绍向Pandas中的现有DataFrame添加新列,包括了向Pandas中的现有DataFrame添加新列的使用技巧和注意事项,需要的朋友参考一下 Pandas 数据框是一种二维数据结构,即,数据以表格的形式在行和列中对齐。可以使用python dict,list和series等创建它。在本文中,我们将看到如何在现有数据框中添加新列。因此,首先让我们使用pandas系列创建一个数据框。

  • 问题内容: 我想知道如何在Spark(Pyspark)中实现以下目标 初始数据框: 结果数据框: 我通常使用以下方法设法将新列“追加”到数据框: 但是,我不知道如何为新列实现这种“行移位”,以便新列具有上一行的字段值(如示例中所示)。我也无法在API文档中找到有关如何通过索引访问DF中特定行的任何内容。 任何帮助,将不胜感激。 问题答案: 您可以如下使用窗口功能 但是有一些重要的问题: 如果您需要

  • 问题内容: 我在尝试获取另一列中的字符串值的字符计数列时遇到问题,但还没有弄清楚如何有效地做到这一点。 显然,这涉及首先创建一个null列,然后将其重写,这对我的数据集要花费很长时间。那么获得这样的东西最有效的方法是什么 我已经检查了很多,但是还无法弄清楚。 问题答案: Pandas为此使用了矢量化字符串方法:。要创建新列,您可以编写: 例如: 这应该比使用Python循环在DataFrame上循