我有一个df结构如下:
CUID DATE T1 T2 T3
0 1000 5/5/2016 3:58:54 4:02:00 4:15:05
1 1001 5/6/2016 17:23:39 17:24:00 17:44:32
2 1002 5/7/2016 18:20:50 18:22:00 18:37:34
3 1003 5/7/2016 21:30:29 21:35:00 21:45:51
4 1004 5/9/2016 22:33:19 22:34:00 22:41:54
...
我想取日期(字符串)并连接到每个时间字符串(即T1,T2,T3)。换句话说,我希望它看起来像这样:
CUID 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
...
我知道我可以使用以下代码执行此操作:
df['T1'] = pd.to_datetime(df.DATE.str.cat(' ' + df['T1']))
df['T2'] = pd.to_datetime(df.DATE.str.cat(' ' + df['T2']))
df['T3'] = pd.to_datetime(df.DATE.str.cat(' ' + df['T3']))
但我想知道是否有更优雅/更有效的方式?
答案 0 :(得分:2)
不是pandas功能,但您可以通过简单的循环减少代码重复:
for column in ['T1', 'T2', 'T3']:
df[column] = pd.to_datetime(df.DATE.str.cat(' ' + df[column]))
答案 1 :(得分:2)
您可以拨打apply
并在lambda
中添加DATE列,其中包含空格和感兴趣的列。
此处apply
将遍历子选定列:
In[8]:
df.loc[:,'T1':] = df.loc[:,'T1':].apply(lambda x: df['DATE'] + ' ' + x)
df
Out[8]:
CUID 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/6/2016 17:23:39 5/6/2016 17:24:00 5/6/2016 17:44:32
2 1002 5/7/2016 5/7/2016 18:20:50 5/7/2016 18:22:00 5/7/2016 18:37:34
3 1003 5/7/2016 5/7/2016 21:30:29 5/7/2016 21:35:00 5/7/2016 21:45:51
4 1004 5/9/2016 5/9/2016 22:33:19 5/9/2016 22:34:00 5/9/2016 22:41:54