Pandas 将数据帧从DateTimeIndex复制到分钟或小时增量计数器

Pandas 将数据帧从DateTimeIndex复制到分钟或小时增量计数器,pandas,dataframe,Pandas,Dataframe,我想将数据帧的索引从DateTimeIndex(例如,2015-06-11 23:59:29)转换为增量小时计数器,如:[0h 1m,0h 2m,0h 3m,0h 4m]。是否可能?如果可以接受HH:MM:SS格式,则可以将DatetimeIndex更改为TimedeltaIndex: start = df.index.min() df.index = df.index-start 比如说, import numpy as np import pandas as pd np.random.s

我想将数据帧的索引从DateTimeIndex(例如,2015-06-11 23:59:29)转换为增量小时计数器,如:[0h 1m,0h 2m,0h 3m,0h 4m]。是否可能?

如果可以接受
HH:MM:SS
格式,则可以将DatetimeIndex更改为TimedeltaIndex:

start = df.index.min()
df.index = df.index-start

比如说,

import numpy as np
import pandas as pd
np.random.seed(2015)
N = 10
index = pd.date_range('2015-7-24', periods=N, freq='15T')
df = pd.DataFrame(np.random.randint(10, size=(N,4)), index=index)
start = df.index.min()
df.index = df.index-start
print(df)
屈服

          0  1  2  3
00:00:00  2  2  9  6
00:15:00  8  5  7  8
00:30:00  0  6  7  8
00:45:00  3  8  6  9
01:00:00  2  3  1  2
01:15:00  6  2  9  8
01:30:00  5  8  4  8
01:45:00  9  1  2  2
02:00:00  1  2  3  3
02:15:00  3  9  3  1

要以
0h 0m
格式打印xtick标签

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

np.random.seed(2015)
N = 10
index = pd.date_range('2015-7-24', periods=N, freq='15T')
df = pd.DataFrame(np.random.randint(10, size=(N,4)).astype(float), index=index)
start = df.index.min()
df.index = df.index-start
df.index /= np.timedelta64(1, 'm')

fig, ax = plt.subplots()
df.plot(kind='line', ax=ax)
def xfmt(x, pos):
    hours, minutes = divmod(x, 60)
    return '{:g}h {:02g}m'.format(hours, minutes)
ax.xaxis.set_major_formatter(ticker.FuncFormatter(xfmt))
plt.show()
的解决方案只适用于从第一行开始索引

根据,为了将这些索引转换为分钟或其他任何操作:

df.index/np.timedelta64(1,'m')

格式是否重要,例如
0h 1m
?或者
HH:MM:SS
!问题:df.plot()打印“0天02:19:58”。。。如何避免打印“0天”部分?以及如何将分钟数打印为xticks?解决方案:
df.index/np.timedelta64(1,'m')
在此处找到解决方案@EnricoRotundo:是的,这是一种查找总分钟数的好方法。