У меня есть серия true / false во фрейме данных pandas, и я хочу преобразовать этот столбец в грандиозный с отрицательными значениями в False, положительными значениями в true и вставить 0 между истиной и ложью.Вставка нуля должна быть чем-то необязательным в моем коде.
Затем значения должны быть увеличены на -1 или +1, когда расстояние со следующим переходом true / false увеличивается.
Iя задаюсь вопросом, как написать это в чистом коде Python.
16/10/18: я добавил новый пример в конце моего сообщения, который не соответствует текущему ответу.
так вот:
0 False
1 False
2 False
3 False
4 True
5 True
6 True
7 True
8 True
9 True
10 False
11 False
12 False
13 False
14 False
15 True
16 True
17 True
18 True
19 True
20 False
даст:
0 False=> -4
1 False=> -3
2 False=> -2
3 False=> -1
=>0
4 True =>+1
5 True => +2
6 True=> +3
7 True=> +3
8 True => +2
9 True => +1
=>0
10 False =>-1
11 False => -2
12 False => -3
13 False =>-2
14 False => -1
=>0
15 True =>+1
16 True =>+2
17 True =>+3
18 True =>+2
19 True =>+1
=>0
20 False=>-1
Вот еще один пример: например, здесь
False
False
False
False
True
True
True
True
True
True
True
True
True
True
False
False
False
False
False
False
False
False
False
False`
Что должно дать:
0 -4
1 -3
2 -2
3 -1
4 1
5 2
6 3
7 4
8 5
9 5
10 4
11 3
12 2
13 1
14 -1
15 -2
16 -3
17 -4
18 -5
19 -6
20 -7
21 -8
22 -9
23 -10
Мой вопрос очень похож на этот: Как посчитать расстояние до предыдущего нуля в серии панд?
Большое спасибо, что поделилисьзнание.
Редактировать: ответ от RafaelC не работает, поскольку он дает во втором примере следующий результат:
0 -4
1 -3
2 -2
3 -1
4 1
5 2
6 3
7 4
8 5
9 5
10 4
11 3
12 2
13 1
14 -10
15 -9
16 -8
17 -7
18 -6
19 -5
20 -4
21 -3
22 -2
23 -1
При индексе 14 он дает -10 вместо -1
Редактирование / редактирование: последний ответ от RaphaelC в этом случае не работает:
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
True
True
True
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
False
Функция возвращает ошибку:
~/anaconda3/lib/python3.6/site-packages/pandas/core/groupby/groupby.py in transform(self, func, *args, **kwargs)
3659
3660 indexer = self._get_index(name)
-> 3661 s = klass(res, indexer)
3662 results.append(s)
3663
~/anaconda3/lib/python3.6/site-packages/pandas/core/series.py in __init__(self, data, index, dtype, name, copy, fastpath)
259 'Length of passed values is {val}, '
260 'index implies {ind}'
--> 261 .format(val=len(data), ind=len(index)))
262 except TypeError:
263 pass
ValueError: Length of passed values is 2, index implies 3
И я не понимаюпочему.