2014-11-20 24 views
0

我有一個數據幀,其中包含UTC時間戳的多列和應該轉換爲時區的一列。我如何編寫一個函數來映射它?根據第三列在pandas DataFrame中轉換多個列的時區?

  created_at   ended_at    timezone 
0 2014-11-19 16:11:45 2014-11-19 16:30:31  America/New_York 
1 2014-11-19 18:37:47 2014-11-19 18:57:55  America/New_York 
2 2014-11-19 18:59:21 2014-11-19 19:51:29 America/Los_Angeles 
3 2014-11-19 19:47:35 2014-11-19 20:58:04  America/New_York 
4 2014-11-19 20:29:46 2014-11-19 20:40:36  America/New_York 
5 2014-11-19 22:23:42 2014-11-19 22:58:43 America/Los_Angeles 
6 2014-11-20 16:31:24 2014-11-20 17:49:12  America/New_York 

回答

1

你可以這樣做。但請記住,有一列是單個時區的效率會更高。所以你可能想要以不同的方式組織你的數據。

In [16]: def conv(col, tzs): 
    ....:  return [ d.tz_localize(tz) for d, tz in zip(col, tzs) ] 
    ....: 

In [17]: df 
Out[17]: 
       date1    date2     tz 
0 2014-11-19 16:11:45 2014-11-19 16:30:31  America/New_York 
1 2014-11-19 18:37:47 2014-11-19 18:57:55  America/New_York 
2 2014-11-19 18:59:21 2014-11-19 19:51:29 America/Los_Angeles 
3 2014-11-19 19:47:35 2014-11-19 20:58:04  America/New_York 
4 2014-11-19 20:29:46 2014-11-19 20:40:36  America/New_York 
5 2014-11-19 22:23:42 2014-11-19 22:58:43 America/Los_Angeles 
6 2014-11-20 16:31:24 2014-11-20 17:49:12  America/New_York 

In [18]: df['date1_tz'] = conv(df['date1'],df['tz']) 

In [19]: df['date2_tz'] = conv(df['date2'],df['tz']) 

In [20]: df 
Out[20]: 
       date1    date2     tz     date1_tz     date2_tz 
0 2014-11-19 16:11:45 2014-11-19 16:30:31  America/New_York 2014-11-19 16:11:45-05:00 2014-11-19 16:30:31-05:00 
1 2014-11-19 18:37:47 2014-11-19 18:57:55  America/New_York 2014-11-19 18:37:47-05:00 2014-11-19 18:57:55-05:00 
2 2014-11-19 18:59:21 2014-11-19 19:51:29 America/Los_Angeles 2014-11-19 18:59:21-08:00 2014-11-19 19:51:29-08:00 
3 2014-11-19 19:47:35 2014-11-19 20:58:04  America/New_York 2014-11-19 19:47:35-05:00 2014-11-19 20:58:04-05:00 
4 2014-11-19 20:29:46 2014-11-19 20:40:36  America/New_York 2014-11-19 20:29:46-05:00 2014-11-19 20:40:36-05:00 
5 2014-11-19 22:23:42 2014-11-19 22:58:43 America/Los_Angeles 2014-11-19 22:23:42-08:00 2014-11-19 22:58:43-08:00 
6 2014-11-20 16:31:24 2014-11-20 17:49:12  America/New_York 2014-11-20 16:31:24-05:00 2014-11-20 17:49:12-05:00 
相關問題