开发者社区> 问答> 正文

在一个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 |
+-----+------+-----+

我想创建另一列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中不起作用。

展开
收起
一码平川MACHEL 2019-01-23 13:44:08 2763 0
1 条回答
写回答
取消 提交回答
  • diff方法现已添加到DataFrame和Series中,在此PR中:https://github.com/dask/dask/pull/1769。像pandas一样工作。

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

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

    2019-07-17 23:26:35
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载