Python 如何从函数中创建新列以打印用于计算持续时间的日期?
以下是我的数据示例(原始数据包含100万行): 我创建了一个函数,用于打印处于活动状态的每个用户的持续时间: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
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