Python 3.x 基于其他列创建派生列
我试图从实际的数据帧创建派生列,如下所示。我有一张连续用药的表格,用药时间记录如下。现在,我尝试创建两个新列,只记录药物开始和结束的时间。实际的dataframe看起来相当大,下面的dataframe只是原始dataframe的一个示例 编辑: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
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中是否有错误,但每当我刷新页面时,它就会清除类似的错误。