Pandas 基于另一列中的值替换列中的值
我有一个数据框,有3240行和3列。列块表示出现列A和B中的值的块。唯一的块数为6,但它们在1-6的整个数据帧中按顺序重复。Pandas 基于另一列中的值替换列中的值,pandas,replace,Pandas,Replace,我有一个数据框,有3240行和3列。列块表示出现列A和B中的值的块。唯一的块数为6,但它们在1-6的整个数据帧中按顺序重复。列A中的值在整个数据帧(块)中以精确顺序从1-10重复。列B中的值存在于a-j(n=10)中,但它们以随机顺序在a-j中重复,因此它们在块内永远不会重复 因此,在6个块中的每个块中,A列(1-10)中的值按1-10的精确顺序重复,而B列中的值(A-j)按随机顺序重复 Df看起来像这样: Block A B ID 1 1
列A
中的值在整个数据帧(块)中以精确顺序从1-10
重复。列B
中的值存在于a-j(n=10)
中,但它们以随机顺序
在a-j
中重复,因此它们在块内永远不会重复
因此,在6个块中的每个块中,A列(1-10)中的值按1-10的精确顺序重复,而B列中的值(A-j)按随机顺序重复
Df看起来像这样:
Block A B ID
1 1 a XY
1 2 b XY
1 3 c XY
1 4 d XY
1 5 e XY
1 6 f XY
1 7 g XY
1 8 h XY
1 9 i XY
1 10 j XY
....
6 1 d XY
...
6 6 j XY
....
1 1 g XX
1 2 a XX
Block A B ID
1 1 f XY
1 2 g XY
1 3 h XY
1 4 i XY
1 5 j XY
1 6 a XY
1 7 b XY
1 8 c XY
1 9 d XY
1 10 e XY
....
6 1 j XY
...
6 6 d XY
....
1 1 g XX
1 2 a XX
在整个dataframe中,我希望根据A列中每个单独块的相应值替换B列中的所有值。逻辑是根据A列中的值,用模式1=6、2=7、3=8、4=9、5=10替换B列中的值。
结果如下所示:
Block A B ID
1 1 a XY
1 2 b XY
1 3 c XY
1 4 d XY
1 5 e XY
1 6 f XY
1 7 g XY
1 8 h XY
1 9 i XY
1 10 j XY
....
6 1 d XY
...
6 6 j XY
....
1 1 g XX
1 2 a XX
Block A B ID
1 1 f XY
1 2 g XY
1 3 h XY
1 4 i XY
1 5 j XY
1 6 a XY
1 7 b XY
1 8 c XY
1 9 d XY
1 10 e XY
....
6 1 j XY
...
6 6 d XY
....
1 1 g XX
1 2 a XX
执行此操作的有效方法是什么?您希望在10
的每个块中识别5
块并交换它们。这是我的解决方案:
df['B'] = (df.assign(blk_5 = (np.arange(len(df))//5+1) % 2,
blk_10 = np.arange(len(df)) // 10
)
.sort_values(['Block','blk_10','blk_5'])
['B'].values
)
对不起,解释得不明白。有6个块,我想分别为每个块执行上面解释的逻辑。因此,B列中的所有值将根据A列中每个块的相应值进行替换。如果A=1,6,B=A,f,那么我需要A=1,6,B=f,A。我希望这有助于我发现问题。我跳过了一件重要的事情:主题ID列。每个主题都在所有6个区块上下旋。总共有54名受试者,因此我需要区分所有54名受试者,并为每个受试者重新分配每个区块内的值。每个受试者的区块在1-6之间重复。因此,当受试者的数据在第6块中以最后一个值结束时,另一个受试者的数据在第1块中开始。