Разница между строкой и ее лидерством на 3 строки в кадре данных dask - PullRequest
0 голосов
/ 22 января 2019

У меня есть файл 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 |
+-----+------+-----+

Я хочу создать еще один столбец col4, который содержит col2[n+3]/col2-1 для каждой группы в столбце col1 отдельно.

Вывод должен быть

   +-----+------+-----+-----+
   |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

но он не работает в сумерках. Любая помощь будет оценена

1 Ответ

0 голосов
/ 22 января 2019

Метод diff теперь добавлен как в DataFrame, так и в Series, в этом PR: https://github.com/dask/dask/pull/1769. Работает так же, как и в пандах.

Более того, я просто прошу вас использовать diff, где вы можете просто предоставить Индекс

Я думаю, что уже есть задача реализовать Shift () с помощью dask .... Я предоставил ссылку выше ... Я надеюсь, что это ответит на ваши вопросы

...