DataFrame可以反向索引&#34 ;?

时间:2015-12-07 02:07:26

标签: python pandas

是否有内置函数来反转索引"一个熊猫数据框?例如,如果数据框表示时间序列数据,并且我们遍历时间序列数据,是否有内置函数来访问给定值的日期?

示例:

read-all-bytes

或者是否有必要以不同的方式浏览数据?

2 个答案:

答案 0 :(得分:2)

您可以枚举系列,然后在同一位置访问索引:

df = pd.DataFrame({'val': [1, 2, 3, 4]}, index=pd.date_range('2015-1-1', periods=4))

for i, val in enumerate(df['val']):
    print((df.index[i], val))

(Timestamp('2015-01-01 00:00:00', offset='D'), 1)
(Timestamp('2015-01-02 00:00:00', offset='D'), 2)
(Timestamp('2015-01-03 00:00:00', offset='D'), 3)
(Timestamp('2015-01-04 00:00:00', offset='D'), 4)

您也可以使用iteritems,这里使用列表理解:

>>> [(i, j) for i, j in df.val.iteritems()]
[(Timestamp('2015-01-01 00:00:00', offset='D'), 1),
 (Timestamp('2015-01-02 00:00:00', offset='D'), 2),
 (Timestamp('2015-01-03 00:00:00', offset='D'), 3),
 (Timestamp('2015-01-04 00:00:00', offset='D'), 4)]

以下是使用具有1000个随机值的数据帧的时序比较。

import numpy as np

df = pd.DataFrame({'val': np.random.randn(1000)}, 
                  index=pd.date_range('2015-1-1', periods=1000))

%timeit [(i, j) for i, j in df.val.iteritems()]
1000 loops, best of 3: 692 µs per loop

%timeit [(df.index[i], val) for i, val in enumerate(df['val'])]
10 loops, best of 3: 18.9 ms per loop

%timeit [df[df == val] for val in df['val']]
1 loops, best of 3: 901 ms per loop

答案 1 :(得分:1)

你可以做到

series[series==i].index

如果同一个值可以有多个日期,则可以执行series[series==i].index.tolist()