Python 如何从函数中创建新列以打印用于计算持续时间的日期?

Python 如何从函数中创建新列以打印用于计算持续时间的日期?,python,pandas,dataframe,date,Python,Pandas,Dataframe,Date,以下是我的数据示例(原始数据包含100万行): 我创建了一个函数,用于打印处于活动状态的每个用户的持续时间: df1_S["change_datetime"] = pd.to_datetime(df1_S["change_datetime"]) m1 = df1_S['State'].eq('Active') m2 = ~m1 & df1_S['endstate'].eq('Active') s1 = df1_S[m1].groupby('Use

以下是我的数据示例(原始数据包含100万行):

我创建了一个函数,用于打印处于活动状态的每个用户的持续时间:

df1_S["change_datetime"] = pd.to_datetime(df1_S["change_datetime"])
m1 = df1_S['State'].eq('Active')
m2 = ~m1 & df1_S['endstate'].eq('Active')

s1 = df1_S[m1].groupby('User')['change_datetime'].first()
s2 = df1_S[m2].groupby('User')['change_datetime'].first()

s = s2.sub(s1)
State_duration = s.to_frame()
State_duration = State_duration.reset_index()
State_duration
以下是运行代码后打印的结果:

状态持续时间:

     User                    change_datetime
    0    100234              19 days 00:40:00
    1    213421              42 days 10:39:00
    2    612312             114 days 16:21:14
    3    100204249020        12 days 15:51:01
    4    100204249030       107 days 15:51:01
    5    100204249040        97 days 15:51:01
    6    100204249050        99 days 15:51:04
    7    100204249060       107 days 15:51:01
    8    100204249070       997 days 15:51:01
    9    100204249340       497 days 15:51:01
    10   100222075820       365 days 05:39:33
    11   100222075830       365 days 05:33:41
    12   100222075900         3 days 05:37:26

Is there a way I can create two new col
我的代码中的umn是State_duration['Start Date/time']和State_duration['End Date/time'],以便在每行打印用于计算持续时间的开始和结束日期/时间戳? 例如,通过这种方式:

     User         Start_dt_time           End_dt_time                 change_datetime
0    100234      2016-01-28 17:17:15    2018-03-04 06:30:01           95 days 10:59:39 
1    213421      2018-02-01 10:01:51    2018-03-04 05:38:51           42 days 10:39:00                                                  97 days 15:51:04
2    612312                                                          114 days 16:21:14
3    100204249020                                                     12 days 15:51:01
4    100204249030                                                    107 days 15:51:01
5    100204249040                                                     97 days 15:51:01
6    100204249050                                                     99 days 15:51:04
7    100204249060                                                    107 days 15:51:01
8    100204249070                                                    997 days 15:51:01
9    100204249340                                                    497 days 15:51:01
10   100222075820                                                    365 days 05:39:33
11   100222075830                                                    365 days 05:33:41
12   100222075900                                                      3 days 05:37:26
我们可以使用沿
axis=1
s1
s2
进行重新命名后使用:

结果:

    User   change_datetime       Start_dt_time         End_dt_time
0  100234 765 days 13:12:46 2016-01-28 17:17:15 2018-03-04 06:30:01
1  213421  30 days 19:37:00 2018-02-01 10:01:51 2018-03-04 05:38:51
s_duration = pd.concat([s2.sub(s1), s1.rename('Start_dt_time'), 
                        s2.rename('End_dt_time')], axis=1).reset_index()
    User   change_datetime       Start_dt_time         End_dt_time
0  100234 765 days 13:12:46 2016-01-28 17:17:15 2018-03-04 06:30:01
1  213421  30 days 19:37:00 2018-02-01 10:01:51 2018-03-04 05:38:51