pandas 用python在 Dataframe 中查找组间时差

von4xj4u  于 2022-12-16  发布在  Python
关注(0)|答案(1)|浏览(136)

我用的是巨蟒的Pandas。
我有以下订单 Dataframe 。当每个订单有其订单ID,订单时间和订单中的不同项目ID。在这个例子中,我有三个不同的组- A,B,C:

order_id                 time  item_id
0        A  2022-11-10 08:43:07        1
1        A  2022-11-10 08:43:07        2
2        A  2022-11-10 08:43:07        3
3        B  2022-11-10 08:46:27        1
4        B  2022-11-10 08:46:27        2
5        C  2022-11-10 08:58:45        3

我想按时间顺序计算A组和B组之间的时间差,然后计算B组和C组之间的时间差,并将结果保存到另一列中
预期结果:

order_id                 time  item_id        time_diff
0        A  2022-11-10 08:43:07        1                 
1        A  2022-11-10 08:43:07        2                 
2        A  2022-11-10 08:43:07        3                 
3        B  2022-11-10 08:46:27        1  0 days 00:03:20
4        B  2022-11-10 08:46:27        2  0 days 00:03:20
5        C  2022-11-10 08:58:45        3  0 days 00:12:18

当整个组的时间相似时,我如何计算组之间的时间差?
尝试使用.diff(),但我只得到了组内的差异:

df['time_diff'] = df.groupby('order_id')['time'].diff()

df
Out[141]: 
  order_id                time  item_id time_diff
0        A 2022-11-10 08:43:07        1       NaT
1        A 2022-11-10 08:43:07        2    0 days
2        A 2022-11-10 08:43:07        3    0 days
3        B 2022-11-10 08:46:27        1       NaT
4        B 2022-11-10 08:46:27        2    0 days
5        C 2022-11-10 08:58:45        3       NaT

我想要的是组之间的差异,而不是组内部的差异。我可以使用.last().diff()计算差异,但我不知道如何将其作为列保存回 Dataframe :

df.groupby('order_id')['time'].last().diff().to_frame('time_diff')
Out[]: 
               time_diff
order_id                
A                    NaT
B        0 days 00:03:20
C        0 days 00:12:18

谢谢

hgb9j2n6

hgb9j2n61#

你走对了路。这对你有用:

diff = df.groupby('order_id')['time'].last().diff().to_frame('time_diff').reset_index()
df = df.merge(diff, on='order_id', how='left')
df

相关问题