我们有一个大的(spark)数据帧,需要计算一个新列。每一行都是根据同一列中前一行的值计算的(新列中的第一行仅为1)。这在for循环中是微不足道的,但是由于窗口函数中的行数非常多,我们希望这样做。因为当前行的输入是前一行,所以如果可能的话,我们不知道如何实现这一点。你知道吗
我们有一个大型数据框,其中一列包含三个值:a、B和C。这三个选项中的每一个都表示一个公式,用于计算同一行中新列中的新值。你知道吗
例如:
A
B
B
C
B
A
C
B
C
A
应该变成:
A 1
B 1
B 1
C 2
B 2
A 1
C 2
B 2
C 3
A 1
我们可以使用for循环(伪代码)实现以下行为:
for index in range(my_df):
if index == 0:
my_df[new_column][index] = 1
elseif my_df[letter_column][index] == 'A':
my_df[new_column][index] = 1
elseif my_df[letter_column][index] == 'B':
my_df[new_column][index] = my_df[new_column][index-1]
elseif my_df[letter_column][index] == 'C':
my_df[new_column][index] = my_df[new_column][index-1] + 1
我们希望用一个窗口函数替换for循环。我们尝试使用'lag'关键字,但前一行的值取决于之前的计算。有没有办法做到这一点,或者根本不可能用窗口(或地图)功能做到这一点?如果不可能,有没有比for循环更快的替代方法?(reduce函数会有类似的性能?)你知道吗
同样,由于行数非常多,这与性能有关。我们应该有足够的RAM来存储内存中的所有内容,但是我们希望处理过程尽可能快(并且学习如何更普遍地解决这个问题的类似问题:应用需要在该窗口函数的前几行中计算的数据的窗口函数)。任何帮助都将不胜感激!!你知道吗
谨致问候, 米克
目前没有回答
相关问题 更多 >
编程相关推荐