优雅的方式将一列中的字符串连接到df中的多列

时间:2017-05-22 14:59:11

标签: python pandas time string-concatenation

我有一个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']))

但我想知道是否有更优雅/更有效的方式?

2 个答案:

答案 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