Python 为数据帧的子集设置多个值
假设我的数据帧df有两列:block,trial。每个区块有10次试验。现在,我想从“my_response”列表中创建一个新列“response”。我似乎不能做下面这样的事情: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
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 []