2013-09-01 4 views
1

Я использую pandas 0.12.0. У меня есть DataFrame, который выглядит как:Создать новый столбец DataFrame из существующего?

    date   ms 
0 2013-06-03 00:10:00 75.846318 
1 2013-06-03 00:20:00 78.408277 
2 2013-06-03 00:30:00 75.807990 
3 2013-06-03 00:40:00 70.509438 
4 2013-06-03 00:50:00 71.537499 

Я хочу, чтобы создать третью колонку, «Тод», который содержит только временную часть даты (то есть называть .time() на каждое значении). Я немного новичок в пандах, поэтому я подозреваю, что это тривиально, но я просто не вижу, как это сделать.

ответ

2

Просто apply метод Отметка time к элементам в столбце Дата:

In [11]: df['date'].apply(lambda x: x.time()) 
    # equivalently .apply(pd.Timestamp.time) 
Out[11]: 
0 00:10:00 
1 00:20:00 
2 00:30:00 
3 00:40:00 
4 00:50:00 
Name: date, dtype: object 

In [12]: df['tod'] = df['date'].apply(lambda x: x.time()) 

Это дает столбец datetime.time объектов.

+0

ДУХ. Благодарю. Я знал, что это имеет какое-то отношение к apply(), но не получилось, что мне нужно было обернуть .time() в лямбда. Благодарю. –

2

Используя метод Энди, созданный на индекс быстрее, чем применять

In [93]: df = DataFrame(randn(5,1),columns=['A']) 

In [94]: df['date'] = date_range('20130101 9:05',periods=5) 

In [95]: df['time'] = Index(df['date']).time 

In [96]: df 
Out[96]: 
      A    date  time 
0 0.053570 2013-01-01 09:05:00 09:05:00 
1 -0.382155 2013-01-02 09:05:00 09:05:00 
2 0.357984 2013-01-03 09:05:00 09:05:00 
3 -0.718300 2013-01-04 09:05:00 09:05:00 
4 0.531953 2013-01-05 09:05:00 09:05:00 

In [97]: df.dtypes 
Out[97]: 
A    float64 
date datetime64[ns] 
time   object 
dtype: object 

In [98]: df['time'][0] 
Out[98]: datetime.time(9, 5) 
+0

heh. Использование Index действительно немного странно, интересно, должен ли быть способ доступа к методам DatetimeIndex, специфичным для конкретного времени, непосредственно из серии. –

+0

Может быть, миксен для супер и индекс, и серия могут работать – Jeff

Смежные вопросы