首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于pandas上的2个值创建新的DateTime值

基于pandas上的2个值创建新的DateTime值
EN

Stack Overflow用户
提问于 2020-06-07 16:27:14
回答 1查看 37关注 0票数 1

我有一个带有以下类型的数据帧:

代码语言:javascript
运行
复制
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

这个结构:

代码语言:javascript
运行
复制
    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)。

期望的结果:

代码语言:javascript
运行
复制
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分组的每一行执行此操作

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-07 16:37:19

对于每个列Timestamp的组,使用GroupBy.transform重复第一个值,然后按时间增量的累积和和按Series.cumsum使用Series.add

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62242764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档