В пандах временной ряд может быть проиндексирован путем передачи строки, которая интерпретируется как дата.Это работает и для DataFrame:
>>> dates = pd.date_range('2000-01-01', periods=8, freq='M')
>>> df = pd.DataFrame(np.random.randn(8, 4), index=dates, columns=['A', 'B', 'C', 'D'])
>>> df
A B C D
2000-01-31 0.096115 0.069723 -1.546733 -1.661178
2000-02-29 0.256296 1.838310 0.227132 1.765269
2000-03-31 0.315862 0.167007 -1.340888 1.005260
2000-04-30 1.238728 -2.325420 1.371134 -0.373232
2000-05-31 0.639211 -0.209961 -1.006498 0.005214
2000-06-30 0.091590 -0.664554 -2.037539 -1.335070
2000-07-31 0.275373 -0.398758 0.402848 0.441035
2000-08-31 2.189259 -1.236159 -0.579680 0.878355
>>> df['2000-05']
A B C D
2000-05-31 0.639211 -0.209961 -1.006498 0.005214
Я ищу способы сделать это, когда метками времени являются имена столбцов.
>>> df = df.T
>>> df['2000-05']
Это дает TypeError: only integer scalar arrays can be converted to a scalar index
.То же самое верно для
>>> df.loc[:, '2000-05']
Самое непосредственное решение, о котором я могу подумать, это
>>> df.T['2000-05'].T
2000-05-31
A 0.639211
B -0.209961
C -1.006498
D 0.005214
, но мне интересно, есть ли другие хорошие решения.Я полагаю, что для очень больших DataFrames выполнение транспонирования может оказать влияние на производительность, которого можно здесь избежать.