如何计算同一列中的值与“a”中的数据之间的差值;“长”;Python/Pandas格式

如何计算同一列中的值与“a”中的数据之间的差值;“长”;Python/Pandas格式,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有一个按长格式ID排序的数据帧。大多数ID有多行,并且所有行都有日期。我想计算每个ID内连续行中日期之间的差异 我曾尝试在Pandas中使用groupby对象,并将数据旋转到广泛的格式,但没有成功。设置如下所示。(很抱歉,我不知道如何发布下面设置代码的控制台输出。) 日期列中的整数是日期的替代项。我知道如何处理约会,所以不需要帮助。代码应该计算一个ID内连续行之间的日期差异,并将差异放入一个名为“差异”的新列中(即,当它到达下一个ID时应该“重新开始”)。每个ID中的第一行将没有差异项,因为没

我有一个按长格式ID排序的数据帧。大多数ID有多行,并且所有行都有日期。我想计算每个ID内连续行中日期之间的差异

我曾尝试在Pandas中使用groupby对象,并将数据旋转到广泛的格式,但没有成功。设置如下所示。(很抱歉,我不知道如何发布下面设置代码的控制台输出。)

日期列中的整数是日期的替代项。我知道如何处理约会,所以不需要帮助。代码应该计算一个ID内连续行之间的日期差异,并将差异放入一个名为“差异”的新列中(即,当它到达下一个ID时应该“重新开始”)。每个ID中的第一行将没有差异项,因为没有要计算的差异。第二个应该是ID中第一行和第二行日期之间的差异,等等

df = pd.DataFrame({'ID': [1,1,2,2,2,2,3,3,3],
'action': ['first', 'end', 'first', 'change', 'change', 
'last','first','change', 'end'],
'date': [1, 2, 2, 4, 6, 8, 1, 2, 9],
'movement': [1,0,1,1,1,0,1,1,0],})
这是我的控制台上的数据帧图像:

生成所需输出的代码如下:

desiredOutput = pd.DataFrame({'ID': [1,1,2,2,2,2,3,3,3],
'action': ['first', 'end', 'first', 'change', 'change', 
'last','first','change', 'end'],
'date': [1, 2, 2, 4, 6, 8, 1, 2, 9],
'movement': [1,0,1,1,1,0,1,1,0], 'difference':[0,1,0,2,2,2,0,1,7]})

这是一个
groupby
问题。您可以使用,记住将空值替换为
0
,并转换为
int

df['difference'] = df.groupby('ID')['date'].diff().fillna(0).astype(int)

print(df)

#    ID  action  date  movement  difference
# 0   1   first     1         1           0
# 1   1     end     2         0           1
# 2   2   first     2         1           0
# 3   2  change     4         1           2
# 4   2  change     6         1           2
# 5   2    last     8         0           2
# 6   3   first     1         1           0
# 7   3  change     2         1           1
# 8   3     end     9         0           7

谢谢jpp。我编辑了这篇文章以显示所需的输出。我会尽快补充一些我试过的东西。非常感谢,jpp。我知道一定有一个简单的方法。成功了!