首页 > 解决方案 > 在 dask 数据框中,行与其前导之间的差异为 3 行

问题描述

我有一个CSV文件已通过以下代码作为 dask 数据框导入:

import dask.dataframe as dd
df = dd.read_csv("name and path of the file.csv")
df.head(10)

输出

+-----+------+-----+
|col1 | col2 | col3|
+-----+------+-----+    
|  A  |  2   |  4  |
+-----+------+-----+    
|  A  |  4   |  5  | 
+-----+------+-----+    
|  A  |  7   |  7  | 
+-----+------+-----+    
|  A  |  3   |  8  | 
+-----+------+-----+    
|  A  |  7   |  3  | 
+-----+------+-----+    
|  B  |  8   |  9  |
+-----+------+-----+    
|  B  |  10  |  10 | 
+-----+------+-----+    
|  B  |  8   |  9  |
+-----+------+-----+    
|  B  |  20  |  15 |
+-----+------+-----+

我想为col1col4col2[n+3]/col2-1的每个组分别创建另一列。

输出应该是

   +-----+------+-----+-----+
   |col1 | col2 | col3| col4|
   +-----+------+-----+-----+    
   | A   |    2 |   4 |  0.5|  #(3/2-1)
   +-----+------+-----+-----+    
   | A   |    4 |   5 | 0.75| #(7/4-1)
   +-----+------+-----+-----+    
   | A   |    7 |   7 |  NA |
   +-----+------+-----+-----+    
   | A   |    3 |   8 |  NA |
   +-----+------+-----+-----+    
   | A   |    7 |   3 |  NA |
   +-----+------+-----+-----+    
   | B   |    8 |   9 | 1.5 |
   +-----+------+-----+-----+    
   | B   |   10 |  10 |  NA |
   +-----+------+-----+-----+    
   | B   |    8 |  9  |  NA |
   +-----+------+-----+-----+    
   | B   |   20 |  15 |  NA |
   +-----+------+-----+-----+

我们可以在 pandas 上执行此任务,如下所示

df['col4'] = df.groupby('col1')['col2'].transform(lambda x: x.shift(-3)) / df['col2'] - 1

但它在黎明时不起作用。任何帮助,将不胜感激

标签: pythondataframedaskshift

解决方案


diff 方法现已添加到 DataFrame 和 Series,在此 PR 中:https ://github.com/dask/dask/pull/1769 。工作原理与在 pandas 中的相同。

此外,我只是要求您在可以提供索引的地方使用 diff

我想已经有一个任务来实现 Shift() 与 dask ......我已经提供了上面的链接......我希望这会回答你的问题


推荐阅读