是否有内置函数来反转索引"一个熊猫数据框?例如,如果数据框表示时间序列数据,并且我们遍历时间序列数据,是否有内置函数来访问给定值的日期?
示例:
read-all-bytes
或者是否有必要以不同的方式浏览数据?
答案 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()