Pandas选择具有布尔日期条件的列

时间:2013-11-07 11:16:01

标签: python pandas

我想使用布尔索引从pandas数据框中选择一个日期时间索引作为列标题的列:

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

我想只返回前三列。

2 个答案:

答案 0 :(得分: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组合。

答案 1 :(得分:1)

我与duck进行了很长时间的聊天,最终意识到这很简单:

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

我喜欢熊猫。

编辑:

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

print df.loc[:, df.columns.map(lambda col: col < datetime(2013, 1, 3, 0, 0))]