Python 为数据帧的子集设置多个值

Python 为数据帧的子集设置多个值,python,pandas,Python,Pandas,假设我的数据帧df有两列:block,trial。每个区块有10次试验。现在,我想从“my_response”列表中创建一个新列“response”。我似乎不能做下面这样的事情: my_response = [1,5,2,4,3,1,4,2,3,4] df.loc[df['block'] == 0, 'response'] = my_response 我知道如果是标量值,我可以设置值 df.loc[df['block'] == 0, 'response'] = 1 是否有任何方法可以为dat

假设我的数据帧df有两列:block,trial。每个区块有10次试验。现在,我想从“my_response”列表中创建一个新列“response”。我似乎不能做下面这样的事情:

my_response = [1,5,2,4,3,1,4,2,3,4]
df.loc[df['block'] == 0, 'response'] = my_response
我知道如果是标量值,我可以设置值

df.loc[df['block'] == 0, 'response'] = 1
是否有任何方法可以为dataframe的子集设置一个值列表


谢谢大家!

您可以使用
map
和字典

df = pd.DataFrame(dict(block=[0, 0, 1, 1], trial=[0, 1, 0, 1]))

my_response = {0: [1,5,2,4,3,1,4,2,3,4]}

df.assign(response=df.block.map(my_response))

   block  trial                        response
0      0      0  [1, 5, 2, 4, 3, 1, 4, 2, 3, 4]
1      0      1  [1, 5, 2, 4, 3, 1, 4, 2, 3, 4]
2      1      0                             NaN
3      1      1                             NaN
您甚至可以传递默认的空列表

df.assign(response=df.block.map(lambda x: my_response.get(x, [])))

   block  trial                        response
0      0      0  [1, 5, 2, 4, 3, 1, 4, 2, 3, 4]
1      0      1  [1, 5, 2, 4, 3, 1, 4, 2, 3, 4]
2      1      0                              []
3      1      1                              []