【发布时间】:2018-10-14 18:21:46
【问题描述】:
我在 pandas 数据框中有一系列真/假,我想将此列转换为具有 False 负值、true 正值并在真假之间插入 0 的宏。 在我的代码中插入零应该是可选的。
那么当与下一个转换真/假的距离增加时,值应该增加-1或+1。
我正在讨论如何用干净的 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
我的问题与这个问题非常相似:How to count distance to the previous zero in pandas series?
非常感谢您分享您的知识。
编辑:来自 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
我不明白为什么。
【问题讨论】: