Python 3.x 基于其他列创建派生列

Python 3.x 基于其他列创建派生列,python-3.x,pandas,dataframe,Python 3.x,Pandas,Dataframe,我试图从实际的数据帧创建派生列,如下所示。我有一张连续用药的表格,用药时间记录如下。现在,我尝试创建两个新列,只记录药物开始和结束的时间。实际的dataframe看起来相当大,下面的dataframe只是原始dataframe的一个示例 编辑: DATETIME_1 DATETIME_2 DRUG 2018-11-13 07:00:00 2018-11-13 07:59:59 Drug 1 2018-11-13 08:00:00 2018-11

我试图从实际的数据帧创建派生列,如下所示。我有一张连续用药的表格,用药时间记录如下。现在,我尝试创建两个新列,只记录药物开始和结束的时间。实际的dataframe看起来相当大,下面的dataframe只是原始dataframe的一个示例

编辑:

   DATETIME_1            DATETIME_2        DRUG
 2018-11-13 07:00:00  2018-11-13 07:59:59  Drug 1
 2018-11-13 08:00:00  2018-11-13 08:59:59  Drug 1
 2018-11-13 09:00:00  2018-11-13 09:59:59  Drug 1
 2018-11-13 10:00:00  2018-11-13 10:59:59  Drug 2
 2018-11-13 11:00:00  2018-11-13 11:59:59  Drug 2
 2018-11-13 12:00:00  2018-11-13 12:59:59  Drug 2
 2018-11-13 13:00:00  2018-11-13 13:59:59  Drug 3
 2018-11-15 07:00:00  2018-11-15 07:59:59  Drug 1
 2018-11-15 08:00:00  2018-11-15 08:59:59  Drug 1
 2018-11-15 09:00:00  2018-11-15 09:59:59  Drug 1
 2018-11-25 15:00:00  2018-11-25 15:59:59  Drug 1
 2018-11-25 16:00:00  2018-11-25 16:59:59  Drug 1
 2018-11-25 22:00:00  2018-11-25 22:59:59  Drug 4
 2018-11-25 23:00:00  2018-11-25 23:59:59  Drug 4
编辑2:

   DATETIME_1            DATETIME_2        DRUG
 2018-11-13 07:00:00  2018-11-13 07:59:59  Drug 1
 2018-11-13 08:00:00  2018-11-13 08:59:59  Drug 1
 2018-11-13 09:00:00  2018-11-13 09:59:59  Drug 1
 2018-11-13 10:00:00  2018-11-13 10:59:59  Drug 2
 2018-11-13 11:00:00  2018-11-13 11:59:59  Drug 2
 2018-11-13 12:00:00  2018-11-13 12:59:59  Drug 2
 2018-11-13 13:00:00  2018-11-13 13:59:59  Drug 3
 2018-11-15 07:00:00  2018-11-15 07:59:59  Drug 1
 2018-11-15 08:00:00  2018-11-15 08:59:59  Drug 1
 2018-11-15 09:00:00  2018-11-15 09:59:59  Drug 1
 2018-11-25 15:00:00  2018-11-25 15:59:59  Drug 1
 2018-11-25 16:00:00  2018-11-25 16:59:59  Drug 1
 2018-11-25 22:00:00  2018-11-25 22:59:59  Drug 4
 2018-11-25 23:00:00  2018-11-25 23:59:59  Drug 4
预期DF:

     DATETIME_1            DATETIME_2      DRUG   START_TIME      END_TIME
 2018-11-13 07:00:00  2018-11-13 07:59:59  Drug 1 2018-11-13 07:00:00
 2018-11-13 08:00:00  2018-11-13 08:59:59  Drug 1
 2018-11-13 09:00:00  2018-11-13 09:59:59  Drug 1               2018-11-13 09:59:59
 2018-11-13 10:00:00  2018-11-13 10:59:59  Drug 2 2018-11-13 10:00:00
 2018-11-13 11:00:00  2018-11-13 11:59:59  Drug 2
 2018-11-13 12:00:00  2018-11-13 12:59:59  Drug 2               2018-11-13 12:59:59
 2018-11-13 13:00:00  2018-11-13 13:59:59  Drug 3 2018-11-13 13:00:00 2018-11-13 13:59:59
 2018-11-15 07:00:00  2018-11-15 07:59:59  Drug 1 2018-11-15 07:00:00
 2018-11-15 08:00:00  2018-11-15 08:59:59  Drug 1
 2018-11-15 09:00:00  2018-11-15 09:59:59  Drug 1               2018-11-15 09:59:59
 2018-11-25 15:00:00  2018-11-25 15:59:59  Drug 1 2018-11-25 15:00:00
 2018-11-25 16:00:00  2018-11-25 16:59:59  Drug 1               2018-11-25 16:59:59
 2018-11-25 22:00:00  2018-11-25 22:59:59  Drug 4 2018-11-25 22:00:00
 2018-11-25 23:00:00  2018-11-25 23:59:59  Drug 4               2018-11-25 23:59:59

我不太确定如何解决这个问题,如果能得到一些帮助,我将不胜感激

您可以使用
idxmax
idxmin

s=df.DRUG.ne(df.DRUG.shift()).cumsum()
t=df.DATETIME_1.dt.date
s1=df.groupby([s,t]).DATETIME_1.idxmin()
s2=df.groupby([s,t]).DATETIME_2.idxmax()
df['start']=df.loc[s1,'DATETIME_1']
df['end']=df.loc[s2,'DATETIME_2']

我刚刚编辑了这篇文章。大多数情况下,同一种药物在某些天之后会重复使用,并且同一种药物会持续使用几天。以前的代码工作得非常好,我的错是没有提到另一种情况。有时我们一天服用一种药物,几天后,会服用不同剂量的同一种药物。@akashbachu我有什么问题吗?答案让你保持接受和不接受@akashbachu也会再次更新答案,不建议继续编辑问题。谢谢!!我不会那么做的!!我不确定stackoverflow中是否有错误,但每当我刷新页面时,它就会清除类似的错误。