У меня есть DataFrame со столбцами col1, col2, col3.Я хочу создать еще один col4, который содержит col2 [n + 3] / col2-1 для каждой группы в col1 отдельно.
+-----+------+-----+
|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 |
+-----+------+-----+
Выходные данные должны быть
+-----+------+-----+-----+
|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').apply(lambda x:a['col2'].shift(-3)/a['col2']-1)
, что приводит к col4 со всеми сущностями в виде 'NA'.
Я также использовал
df['col4']= df.groupby('col1').pipe(lambda x:a['col2'].shift(-3)/a['col2']-1)
, который не учитывает группы 'A' и 'B' и приводит к
+-----+------+-----+-------+
|col1 | col2 | col3| col4 |
+-----+------+-----+-------+
| A | 2 | 4 | 0.5 |
+-----+------+-----+-------+
| A | 4 | 5 | 0.75 |
+-----+------+-----+-------+
| A | 7 | 7 | 0.1428|
+-----+------+-----+-------+
| A | 3 | 8 | 2.33 |
+-----+------+-----+-------+
| A | 7 | 3 | 0.1428|
+-----+------+-----+-------+
| B | 8 | 9 | 1.5 |
+-----+------+-----+-------+
| B | 10 | 10 | NA |
+-----+------+-----+-------+
| B | 8 | 9 | NA |
+-----+------+-----+-------+
| B | 20 | 15 | NA |
+-----+------+-----+-------+
Кто-нибудь знает, как выполнить эту задачу или исправить ошибку?проблема моих кодов?