3

我想使用布尔索引从带有日期时间索引作为列标题的熊猫数据框中选择列:

dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(4, 6), index=list('ABCD'), columns=dates)

返回:

   2013-01-01  2013-01-02  2013-01-03  2013-01-04  2013-01-05  2013-01-06
A    0.173096    0.344348    1.059990   -1.246944    1.624399   -0.276052
B    0.277148    0.965226   -1.301612   -1.264500   -0.124489    1.704485
C   -0.375106    0.103812    0.939749   -2.826329   -0.275420    0.664325
D    0.039756    0.631373    0.643565   -1.516543   -0.654626   -1.544038

我只想返回前三列。

4

2 回答 2

8

我可能会

>>> df.loc[:, df.columns <= datetime(2013, 1, 3)]
   2013-01-01  2013-01-02  2013-01-03
A    1.058112    0.883429   -1.939846
B    0.753125    1.664276   -0.619355
C    0.014437    1.125824   -1.421609
D    1.879229    1.594623   -1.499875

您可以直接对列索引进行矢量化比较,而无需使用map/lambda组合。

于 2013-11-07T11:58:33.443 回答
1

我和鸭子聊了很久,终于意识到事情就这么简单:

print df.loc[:, :datetime(2013, 1, 3, 0, 0)]

我爱熊猫。

编辑:

好吧,事实上这并不是我想要的,因为它依赖于列标题中存在的“查询”日期。这实际上是我需要的:

print df.loc[:, df.columns.map(lambda col: col < datetime(2013, 1, 3, 0, 0))]
于 2013-11-07T11:16:01.460 回答