我有一个df结构如下:
rl
我想识别T1和T3之前的时间。如果T2或T3发生在T1之前,那么我想在T2 / T3上加一天。
我遇到的第一个问题是读取一个布尔数组,这将允许我识别T2和T3中哪些记录出现在T1之前。我可以通过以下方式为单个列执行此操作:
ID DATE T1 T2 T3
0 1000 5/5/2016 5/5/2016 3:58:54 5/5/2016 4:02:00 5/5/2016 4:15:05
1 1001 5/6/2016 5/5/2016 17:23:39 5/5/2016 17:24:00 5/5/2016 17:44:32
2 1002 5/7/2016 5/5/2016 18:20:50 5/5/2016 18:22:00 5/5/2016 18:37:34
3 1003 5/7/2016 5/5/2016 21:30:29 5/5/2016 21:35:00 5/5/2016 21:45:51
4 1004 5/9/2016 5/5/2016 22:33:19 5/5/2016 22:34:00 5/5/2016 22:41:54
但是,如果我尝试使用多个列执行此操作:
idx = pd.to_datetime(df['T1'])<pd.to_datetime(df['T2'])
给了我以下错误:
idx = pd.to_datetime(df['T1'])<pd.to_datetime(df['T2':])
一旦发现这个问题,我需要在TypeError: cannot do slice indexing on <class 'pandas.indexes.range.RangeIndex'> with these indexers [T2] of <class 'str'>
的时间添加一天,例如:
True
但是,我还没有能够玩这个部分,所以一些帮助将不胜感激。提前谢谢!
答案 0 :(得分:2)
IIUC:
df.loc[:, ['T2', 'T3']] = \
df[['T2', 'T3']].add(
pd.to_timedelta(((df.T2 < df.T1) | (df.T3 < df.T1)).astype(int), 'd'), 0)