Python 基于另一列中的值交换第一列中的值

Python 基于另一列中的值交换第一列中的值,python,pandas,position,Python,Pandas,Position,我有一个四列的数据框。第一列代表主题,每个主题在一列中连续重复60次。总共有54个科目。第二列表示块。每个受试者都经历了6次以上的阻滞,从第1次开始,到第6次结束。第三列是名称。每个区块包含10个名称,从20个可能的名称中随机选择。第四列表示名称的序列号。因此,每个块包含1-10的序列号和相应的随机分配的名称。问题是,名字被错误地分配到了他们的序列号上 我想要的是根据相应的序列号交换(更改位置)名称。因此序列号1下的名称将与序列号6下的名称交换(模式:1=6,2=7,3=8,4=9,5=10)。

我有一个四列的数据框。第一列代表主题,每个主题在一列中连续重复60次。总共有54个科目。第二列表示块。每个受试者都经历了6次以上的阻滞,从第1次开始,到第6次结束。第三列是名称。每个区块包含10个名称,从20个可能的名称中随机选择。第四列表示名称的序列号。因此,每个块包含1-10的序列号和相应的随机分配的名称。问题是,名字被错误地分配到了他们的序列号上

我想要的是根据相应的序列号交换(更改位置)名称。因此序列号1下的
名称将
与序列号6下的名称交换
(模式:1=6,2=7,3=8,4=9,5=10)
。序列号保持不变,但名称顺序需要更改。我想为每一个主题的每一个街区做一个解释。我有一个代码正在做正确的事情,但问题是,它只适用于第一个主题:

 df['Name'] = (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'])
         ['Name'].values
      )
我尝试使用groupby对列主题进行分组,并为每个主题分配函数,但没有成功

def function_test(df):  
df['Name'] = (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'])
             ['Name'].values
          )

......
    grouped = df.groupby('Subject')
    print(grouped.transform(function_test))
...
Retrurns: AttributeError: 'Series' object has no attribute 'assign'
我试过的另一件事是:

test = df.groupby(['Subject', 'Block']).apply(function_test)
什么都没用

有什么建议吗?非常感谢

IIUC用途:

def function_test(x):  
    x['Name'] = (x.assign(blk_5 = (np.arange(len(x))//5+1) % 2,
                                   blk_10 = np.arange(len(x)) // 10
                    )
                  .sort_values(['Block','blk_10','blk_5'])
                   ['Name'].values
          )
    return x

df = df.groupby('Subject').apply(function_test)

第二个主题的第一个块一开始,它就把一切都搞乱了。它与我的原始代码保持一致。@Kuki-没有真实数据的硬测试,数据是机密的?@Kuki-可以共享数据吗?通过gdocs,传送或发送电子邮件?对不起,我刚刚意识到你编辑了代码。非常好用,非常感谢!