繁体   English   中英

使用一列datetime对象将两个级别的索引(索引)设置为datetime.date()和datetime.time()。

[英]Set two levels of indexes (indices?) as datetime.date() and datetime.time() using a column of datetime objects

我有一个DataFrame,其中的“时间戳”列由datetime对象(YYYY-mm-dd HH:MM:SS)组成。 我想从这些时间戳中提取日期( datetime.date() )并将其设置为0级索引,并将时间( datetime.time() )设置为1级索引。

例:

                   timestamp    value1    value2
index    
    0    2018-01-01 09:00:00        10        20
    1    2018-01-01 09:01:00        11        21
    2    2018-01-02 09:00:00        12        22
    3    2018-01-02 09:01:00        13        23

会成为:

                          value1    value2
date          time
2018-01-01    09:00:00        10        20
              09:01:00        11        21
2018-01-02    09:00:00        12        22
              09:01:00        13        23

选项1
使用dropset_index

df.set_index([df.timestamp.dt.date, df.timestamp.dt.time]).drop('timestamp', 1)

                      value1  value2
timestamp  timestamp                
2018-01-01 09:00:00       10      20
           09:01:00       11      21
2018-01-02 09:00:00       12      22
           09:01:00       13      23

选项2

d = df.set_index('timestamp')
d.index = [d.index.date, d.index.time]
d

                     value1  value2
2018-01-01 09:00:00      10      20
           09:01:00      11      21
2018-01-02 09:00:00      12      22
           09:01:00      13      23

使用set_indexMultiIndex.from_arrays和最后drop原始列:

mux = pd.MultiIndex.from_arrays([df['timestamp'].dt.date, df['timestamp'].dt.time], 
                                 names=('date','time'))
df = df.set_index(mux).drop('timestamp', 1)

或添加rename_axis

df = (df.set_index([df['timestamp'].dt.date, df['timestamp'].dt.time])
        .drop('timestamp', 1)
        .rename_axis(('date','time')))

print (df)
                     value1  value2
date       time                    
2018-01-01 09:00:00      10      20
           09:01:00      11      21
2018-01-02 09:00:00      12      22
           09:01:00      13      23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM