Python 熊猫:用另一列值移动一列

Python 熊猫:用另一列值移动一列,python,pandas,shift,Python,Pandas,Shift,我尝试使用一列的值将另一列的值移动该量。根据文档,Pandasshift()接受一个整数,但是有没有办法改用一个级数呢 当前代码: import pandas as pd df = pd.DataFrame({ 'a':[1,2,3,4,5,6,7,8,9,10], 'b':[0,0,0,0,4,4,4,0,0,0]}) df['a'] = df['a'].shift(df['b']) a b 0 1 0 1 2 0 2 3

我尝试使用一列的值将另一列的值移动该量。根据文档,Pandas
shift()
接受一个整数,但是有没有办法改用一个级数呢

当前代码:

import pandas as pd

df = pd.DataFrame({ 'a':[1,2,3,4,5,6,7,8,9,10],
                    'b':[0,0,0,0,4,4,4,0,0,0]})

df['a'] = df['a'].shift(df['b'])
    a  b
0   1  0
1   2  0
2   3  0
3   4  0
4   1  4
5   2  4
6   3  4
7   8  0
8   9  0
9  10  0
…这当然不起作用

所需输出:

import pandas as pd

df = pd.DataFrame({ 'a':[1,2,3,4,5,6,7,8,9,10],
                    'b':[0,0,0,0,4,4,4,0,0,0]})

df['a'] = df['a'].shift(df['b'])
    a  b
0   1  0
1   2  0
2   3  0
3   4  0
4   1  4
5   2  4
6   3  4
7   8  0
8   9  0
9  10  0
如果这样做更容易,移位总是相同的,因此理论上,
'b'
序列可以是
真/假
或其他一些二进制触发器,
.shift()
仍然可以是整数。走这条路感觉有点不舒服,但它会完成任务。

找到了答案:

df.loc[df['b'] == 4, 'a'] = df['a'].shift(4)
…这是我上面提到的“黑客”版本。第一个
4
实际上只是一个触发器,第二个
4
将是硬编码的。

我们可以使用:

结果:

In [302]: df['new'] = dyn_shift(df['a'].values, df['b'].values)
# NOTE: we should pass Numpy arrays:   ^^^^^^^         ^^^^^^^

In [303]: df
Out[303]:
    a  b  new
0   1  0    1
1   2  0    2
2   3  0    3
3   4  0    4
4   5  4    1
5   6  4    2
6   7  4    3
7   8  0    8
8   9  0    9
9  10  0   10

它能给你回溯吗?或者当前输出是什么?@Adam,current traceback:
序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。
我真的没想到它会工作,我的代码更能说明问题。我正在玩
.loc[]
df.index
但仍然没有取得进展。shift只是将列中的所有值移动给定的时间段,而不是选定的量@亚当-我不知道该怎么处理这个评论。我想你明白我想要达到的目标。事实上,我不需要使用
.shift()
,只需要获得所需的输出。我想我需要,我只是想知道如何使用它。但是如果列
b
是可变的呢?考虑到班次按行号排列优先顺序;i、 e.第一行在发生冲突时具有最高优先级,一行需要替换另一行。@tiba-你说得对。如果它不仅仅是二进制的,那么这就不是解决方案。然而,根据我最初的帖子,这个解决方案适合我的需要。这就是说,如果您有一个解决方案可以处理
'b'
中的变量,那么无论如何,请发布,我会接受它。@pshep123如果您在
a
中有字符串,并且尝试按1移位。会发生什么?现在,换4档。会发生什么?在这两种情况下都是NaN吗?其他行是否受
a
移位量的影响?@COLDSPEED-如果移位超出索引范围,则只有
NaN
s。如果不是,它将被简单地替换,因此,简化
['apple','banana']
将变成
['apple','apple']
,如果shift列是
[0,1]
。我毫不怀疑这是一个很好的答案,但现在我需要进入
麻木的兔子洞!你能解释一下
numba
jit
做什么吗?我完全不熟悉。谢谢。@pshep123,我想我解释的最好不过;-)