从现有列创建新的DataFrame列?

时间:2013-09-01 12:26:27

标签: pandas

我正在使用pandas 0.12.0。我有一个看起来像这样的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

我想生成第三列“tod”,它只包含日期的时间部分(即对每个值调用.time())。我有点像熊猫新手,所以我怀疑这是微不足道的,但我只是没看到怎么做。

2 个答案:

答案 0 :(得分: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个对象。

答案 1 :(得分:2)

使用在Index上创建的Andy方法比应用

更快
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)