根据另一列中的值交换第一列中的值
Swap values in first column based on values in another column
我有一个包含四列的数据框。第一列代表主题,每个主题在一列中连续重复 60 次。总共有 54 个主题。第二列代表块。每个主题都经历了 6 个以上的块,从第 1 个开始到第 6 个结束。第三列是名称。每个块包含 10 个名称,这些名称是从 20 个可能的名称中随机选择的。第四列代表名称的序列号。所以每个块都包含 1-10 的序列号和相应的随机分配的名称。问题是,名称被错误地分配给了他们的序列号。
我想要的是根据相应的序列号交换(改变位置)名称。所以 Name under Serial Number 1
将是 swapped with Name with the Serial Number 6
(pattern: 1=6, 2=7, 3=8, 4=9, 5=10)
。 Serial Number 保持不变,但需要更改 Name 的顺序。我想为每个主题的每个块都这样做。我有一个代码在做正确的事情,但问题是,它只适用于第一个主题:
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 对 Subject 列进行分组并为每个 Subject 分配函数,但没有成功。
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)
我有一个包含四列的数据框。第一列代表主题,每个主题在一列中连续重复 60 次。总共有 54 个主题。第二列代表块。每个主题都经历了 6 个以上的块,从第 1 个开始到第 6 个结束。第三列是名称。每个块包含 10 个名称,这些名称是从 20 个可能的名称中随机选择的。第四列代表名称的序列号。所以每个块都包含 1-10 的序列号和相应的随机分配的名称。问题是,名称被错误地分配给了他们的序列号。
我想要的是根据相应的序列号交换(改变位置)名称。所以 Name under Serial Number 1
将是 swapped with Name with the Serial Number 6
(pattern: 1=6, 2=7, 3=8, 4=9, 5=10)
。 Serial Number 保持不变,但需要更改 Name 的顺序。我想为每个主题的每个块都这样做。我有一个代码在做正确的事情,但问题是,它只适用于第一个主题:
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 对 Subject 列进行分组并为每个 Subject 分配函数,但没有成功。
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)