首页 > 解决方案 > 如何仅对 DatetimeIndex 进行排序?

问题描述

我有一个像这样的 DatetimeIndex 。

DatetimeIndex(['2015-04-29 00:00:00', '2016-02-22 16:00:00',
               '2016-02-12 04:00:00', '2016-02-16 04:00:00',
               '2016-02-09 12:00:00', '2016-02-11 07:00:00',
               '2015-08-06 00:00:00', '2014-10-31 00:00:00',
               '2014-11-14 00:00:00', '2015-09-24 00:00:00',
               ...
               '2015-12-30 00:00:00', '2015-11-30 00:00:00',
               '2016-02-19 20:00:00', '2014-11-13 00:00:00',
               '2014-12-15 00:00:00', '2015-06-16 00:00:00',
               '2015-12-31 00:00:00', '2015-01-09 00:00:00',
               '2015-11-25 00:00:00', '2015-03-12 00:00:00'],
              dtype='datetime64[ns]', length=604, freq=None)

和这样的(更长的)数据框:

Df: 
                          Val       
Time                                                          
2014-10-10 00:00:00       ...  
2014-10-13 00:00:00       ...
2014-10-14 00:00:00       ...  
2014-10-15 00:00:00       ...
2014-10-16 00:00:00       ...  
                      ...       ...  ...            ...            ...
2016-02-23 16:00:00       ...
2016-02-23 17:00:00       ...   
2016-02-23 18:00:00       ... 
2016-02-23 19:00:00       ...   
2016-02-23 20:00:00       ...

如何仅获取位于这些索引上的行的数据框?

标签: pythonpandasdataframeindexingdatetimeindex

解决方案


如果可能,某些值不匹配,请Index.isin用于boolean indexing

df1 = df[df.index.isin(idx)]

Index.intersection通过选择DataFrame.loc

df1 = df.loc[df.index.intersection(idx)]

如果所有匹配的值都可能通过仅选择简化答案 by loc,但如果至少一个值不匹配,则在新版本的 pandas 中失败:

df2 = df.loc[idx]

推荐阅读