我有一个 Dataframe 如下:
| 调用ID|保存日期|关闭日期|时间增量|
| - ------|- ------|- ------|- ------|
| 1个|2023年2月8日14时35分09秒|2023年2月8日14时35分56秒||
| 1个|2023年2月8日14时35分56秒|2023年2月8日14时42分|价值|
| 第二章|2023年2月7日10时17分18秒|2023年2月7日10时22分23秒||
| 第二章|2023年2月7日10时22分23秒|2023年2月7日15:09:14||
| 第二章|2023年2月7日15:09:14|2023年2月7日16时20分50秒||
| 第二章|2023年2月7日16时20分49秒|2023年2月8日09时23分16秒||
| 第二章|2023年2月8日09时23分16秒|2023年2月8日09:27:21|价值|
| 三个|2023年3月10日10时31分25秒|2023年3月10日10时41分37秒||
| 三个|2023年3月10日10时41分37秒|2023年3月10日14时23分18秒|价值|
为了实现时间增量,我正在执行以下操作:
delta_time = a.iloc[-1]['CloseDate'] - a.iloc[0]['StorageDate']
我需要从每个CallID的第一个StorageDate中减去最后一个CloseDate(总共16821),并且delta_time必须位于每个CallID的最后一行,其中有值(与我从中获取CloseDate的值相同)。
我的做法如下:
callid = 1
while callid <= 16821:
df1 = df1[df1['CallID'] == callid]
delta_time = df1.iloc[-1]['CloseDate'] - df1.iloc[0]['StorageDate']
callid += 1
但问题是我无法将delta_time值解析到正确的行。
在我尝试使用loc和iloc之前,我设法使用以下结构将其发送到df 1中的正确行:
delta_time = df1.iloc[-1]['CloseDate'] - df1.iloc[0]['StorageDate']
df1.loc[1, 'Time Delta'] = delta_time
它可以工作,但效率不高,因为我必须为每个不同的CallID更改loc中的值,而iloc[-1]似乎不起作用。此外,我不知道如何将其解析到主 Dataframe ,而不仅仅是我创建来进行计算的 Dataframe 。
有人能帮帮我吗?
2条答案
按热度按时间qxgroojn1#
使用
groupby.transform
和where
:输出:
可重现输入:
hi3rlvi22#
使用
Series.duplicated
筛选由GroupBy.transform
生成的最后几行:另一个通过
GroupBy.agg
聚合的解决方案,Map差异为: