![](/img/trans.png)
[英]Pythonic way to combine datetime.date and datetime.time objects
[英]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
使用drop
和set_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_index
与MultiIndex.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.