Python 所有转换的累积和

Python 所有转换的累积和,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我有这个数据框 df2 = pd.DataFrame(data = {'id':[1,1,1,1,2,2,2], 'task':['A','B','C','D','A','B','D'], 'time':['2020-01-1','2020-01-2','2020-01-3','2020-01-4','2020-01-5','2020-01-6','2020-01-7']}) df2['time']

我有这个数据框

df2 = pd.DataFrame(data = {'id':[1,1,1,1,2,2,2],
                        'task':['A','B','C','D','A','B','D'],
                        'time':['2020-01-1','2020-01-2','2020-01-3','2020-01-4','2020-01-5','2020-01-6','2020-01-7']}) 
df2['time'] = pd.to_datetime(df2.time)
我想找出按
id
分类的所有任务之间的总时间

   event total_time
0  A - B  2 Days   
1  B - C  1 Days   
2  C - D  1 Days   
3  B - D  1 Days   
我刚到这儿

df2['time_diff'] = df2.groupby(df2.id)['time'].diff()
这给了我这个

   id task       time time_diff
0  1   A   2020-01-01 NaT      
1  1   B   2020-01-02 1 days   
2  1   C   2020-01-03 1 days   
3  1   D   2020-01-04 1 days   
4  2   A   2020-01-05 NaT      
5  2   B   2020-01-06 1 days   
6  2   D   2020-01-07 1 days   

现在,我如何对所有这些
时间进行分组,并根据那里的
事件将它们相加
IIUC您可以简单地
分组方式
和concat:

df2['time_diff'] = df2.groupby(df2.id)['time'].diff()

df2["dir"] = df2.groupby("id")["task"].transform(lambda d: d.shift()+" - "+d)

print (df2)

   id task       time time_diff    dir
0   1    A 2020-01-01       NaT    NaN
1   1    B 2020-01-02    1 days  A - B
2   1    C 2020-01-03    1 days  B - C
3   1    D 2020-01-04    1 days  C - D
4   2    A 2020-01-05       NaT    NaN
5   2    B 2020-01-06    1 days  A - B
6   2    D 2020-01-07    1 days  B - D

print (df2.groupby("dir")["time_diff"].sum())

dir
A - B   2 days
B - C   1 days
B - D   1 days
C - D   1 days
Name: time_diff, dtype: timedelta64[ns]

在您的示例中,
A-B
是如何获得2天的。在最后一列中,你需要的是
a-B,B-C,
等,以及相应的日期?在数据框中,如果你在'id'1中看到,我们有1个a-B,需要1天,如果我们看到id 2,我们再次看到a-B,因此两个事件都需要1天+1天=2天。但是如果我们看到其余的像B-C或C-D只在id 1中出现一次,而在id 2中没有。