Python 添加一个新列,其中包含数据帧另一列的每两行之间的差异

Python 添加一个新列,其中包含数据帧另一列的每两行之间的差异,python,dataframe,for-loop,Python,Dataframe,For Loop,我想获得列持续时间中每两行之间的差值,然后将值填入新列差值或将其打印出来。 所以基本上我想要:第(1)行-第(2)行=差异1,第(3)行-第(4)行=差异2,第(5)行-第(6)行=差异3。。。。 代码示例: data = {'Profession':['Teacher', 'Banker', 'Teacher', 'Judge','lawyer','Teacher'], 'Gender':['Male','Male', 'Female', 'Male','Male','Female'],'Si

我想获得列
持续时间
中每两行之间的差值,然后将值填入新列
差值
或将其打印出来。 所以基本上我想要:第(1)行-第(2)行=差异1,第(3)行-第(4)行=差异2,第(5)行-第(6)行=差异3。。。。 代码示例:

data = {'Profession':['Teacher', 'Banker', 'Teacher', 'Judge','lawyer','Teacher'], 'Gender':['Male','Male', 'Female', 'Male','Male','Female'],'Size':['M','M','L','S','S','M'],'Duration':['5','6','2','3','4','7']} 
data2={'Profession':['Doctor', 'Scientist', 'Scientist', 'Banker','Judge','Scientist'], 'Gender':['Male','Male', 'Female','Female','Male','Male'],'Size':['L','M','L','M','L','L'],'Duration':['1','2','9','10','1','17']} 
data3 = {'Profession':['Banker', 'Banker', 'Doctor', 'Doctor','lawyer','Teacher'], 'Gender':['Male','Male', 'Female', 'Female','Female','Male'],'Size':['S','M','S','M','L','S'],'Duration':['15','8','5','2','11','10']} 
data4={'Profession':['Judge', 'Judge', 'Scientist', 'Banker','Judge','Scientist'], 'Gender':['Female','Female', 'Female','Female','Female','Female'],'Size':['M','S','L','S','M','S'],'Duration':['1','2','9','10','1','17']} 
df= pd.DataFrame(data) 
df2=pd.DataFrame(data2)
df3=pd.DataFrame(data3)
df4=pd.DataFrame(data4)
DATA=pd.concat([df,df2,df3,df4])
DATA.groupby(['Profession','Size','Gender']).agg('sum')
D=DATA.reset_index()
D['difference']=D['Duration'].diff(-1)
我试着使用diff(-1),但它并不是我想要的。有什么想法吗


这就是你想要的吗

D[“邻居”]=D[“持续时间”].shift(-1)
#用0填充空行
D[“邻居”]=D[“邻居”].fillna(0)
#将列“邻居”和“持续时间”转换为数字
D[“邻居”]=局部放电到数字(D[“邻居”])
D[“持续时间”]=pd.到数值(D[“持续时间”])
#有所不同
D[“差异”]=D[“持续时间”]-D[“邻居”]
#删除“邻居”列
D=D.drop(列=[“邻居”],轴=1)
#删除奇数行
D.loc[1::2,“差异”]=无
#打印D
D

hi@ilia,不,我希望将每两行分组,以便第一个值为5-6=-1,然后是2-3=-1和4-7=3……我已经更新了答案。如果不适合您,请定义这些行的分组方式。