根据其他列创建派生列

时间:2019-07-17 00:51:24

标签: python-3.x pandas dataframe

我正在尝试从实际数据框中创建派生列,如下所示。我有一张包含连续用药的表格,用以下方式记录了用药时间。现在,我试图创建两个新列,它们仅记录药物何时开始和何时结束。实际数据框看起来很大,下面的数据框只是原始数据框的示例。

编辑:

编辑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

我不太确定如何解决此问题,如果能获得帮助,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用idxmaxidxmin

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']