使用pandas.loc创建新列

使用pandas.loc创建新列,pandas,Pandas,我的数据集如下所示: ex = pd.DataFrame.from_dict({'grp1': np.random.choice('A B'.split(), 20), 'grp2': np.random.choice([1, 2], 20), 'var1': np.random.rand(20), 'var2': np.random.randint(20)}) 我想用组中的下一个值创建新列,但以下代码导致设置为CopyWarning: ex[['next_var1', 'next_var2'

我的数据集如下所示:

ex = pd.DataFrame.from_dict({'grp1': np.random.choice('A B'.split(), 20), 'grp2': np.random.choice([1, 2], 20), 'var1': np.random.rand(20), 'var2': np.random.randint(20)})
我想用组中的下一个值创建新列,但以下代码导致
设置为CopyWarning

ex[['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1)
因此,我尝试使用
.loc

ex.loc[:, ['next_var1', 'next_var2']] = ex.groupby(['grp1', 'grp2'])[['var1', 'var2']].shift(-1)
但是,它会导致错误:

KeyError:“[Index(['next\u var1','next\u var2'],dtype='object')]中没有一个在[columns]中”


使用
.loc
有什么问题?

使用
loc
无法创建新列。但你可以做到:

ex['next_var1',ex['next_var2']=None,None
ex.loc[:,['next_var1','next_var2']]=ex.groupby(['grp1','grp2'])['var1',var2']].shift(-1).值
但是,您也可以这样做:

ex[['next\u var1','next\u var2']]=ex.groupby(['grp1','grp2'])['var1',var2'].shift(-1)

这是您尝试过的,但是它在python
3.7
和pandas
0.25

上运行良好。在python 3.7.5中,
ex['next\u var1','next\u var2']]=ex.groupby(['grp1',grp2'])[['var1',var2']].shift(-1)