我有一个带有以下类型的数据帧:
Case_Key int64
Activity object
Timestamp datetime64[ns]
Vendor object
Plant object
Country object
City object
Net_Order_Value float64
Order_Queantity float64
Time_Difference timedelta64[ns]
dtype: object
这个结构:
Case_Key Timestamp Time_Difference
0 1000 2016-01-01 08:35:07 0 days
5 1000 2016-01-20 08:35:07 8 days
6 1000 2016-01-26 08:35:07 6 days
7 1000 2016-02-09 08:35:07 14 days
8 10000 2016-01-26 11:57:47 0 days
11 10000 2016-02-05 11:57:47 7 days
12 10000 2016-02-11 11:57:47 6 days
13 10000 2016-02-26 11:57:47 15 days
14 100000 2016-10-13 10:00:01 0 days
17 100000 2016-10-26 10:00:01 9 days
我想要实现的一个示例:取第一个时间戳(2016-01-01),从第二行(8天)添加Time_Difference,并将第二行的时间戳替换为(2016-01-09)。然后,对按Case_Key列分组的下一行执行相同的操作,获取前一个时间戳(2016-01-09),并添加6天,所需结果为(2016-01-15)。
期望的结果:
0 1000 2016-01-01 08:35:07 0 days
5 1000 2016-01-**09** 08:35:07 8 days
6 1000 2016-01-**15** 08:35:07 6 days
7 1000 2016-02-**29** 08:35:07 14 days
并且希望对由相同Case_Key分组的每一行执行此操作
发布于 2020-06-07 08:37:19
对于每个列Timestamp
的组,使用GroupBy.transform
重复第一个值,然后按时间增量的累积和和按Series.cumsum
使用Series.add
s = df.groupby('Case_Key')['Time_Difference'].apply(pd.Series.cumsum)
#because failed with timedeltas
#s = df.groupby('Case_Key')['Time_Difference'].cumsum()
df['Timestamp'] = df.groupby('Case_Key')['Timestamp'].transform('first').add(s)
print (df)
Case_Key Timestamp Time_Difference
0 1000 2016-01-01 08:35:07 0 days
5 1000 2016-01-09 08:35:07 8 days
6 1000 2016-01-15 08:35:07 6 days
7 1000 2016-01-29 08:35:07 14 days
8 10000 2016-01-26 11:57:47 0 days
11 10000 2016-02-02 11:57:47 7 days
12 10000 2016-02-08 11:57:47 6 days
13 10000 2016-02-23 11:57:47 15 days
14 100000 2016-10-13 10:00:01 0 days
17 100000 2016-10-22 10:00:01 9 days
https://stackoverflow.com/questions/62242764
复制相似问题