在一个dask数据帧中,一行与其前导之间的差异为3行-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

在一个dask数据帧中,一行与其前导之间的差异为3行

一码平川MACHEL 2019-01-23 13:44:08 963

我有一个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 |
+-----+------+-----+

我想创建另一列col4,分别包含col2[n+3]/col2-1col1 中的每个组。

输出应该是

+-----+------+-----+-----+
|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 |
+-----+------+-----+-----+
我们可以在熊猫上完成这项任务,如下所示

df['col4'] = df.groupby('col1')['col2'].transform(lambda x: x.shift(-3)) / df['col2'] - 1
但它在dask中不起作用。

分享到
取消 提交回答
全部回答(1)
  • 一码平川MACHEL
    2019-07-17 23:26:35

    diff方法现已添加到DataFrame和Series中,在此PR中:https://github.com/dask/dask/pull/1769。像pandas一样工作。

    而且我只是要求你使用diff,你可以只提供索引

    我想已经有一个任务用dask实现Shift()....

    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章