Pandas 基于另一列中的值替换列中的值

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

我有一个数据框,有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    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块中开始。