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中没有。