时间序列的数据透视表和period_index

时间:2020-08-30 11:49:16

标签: python pandas time-series pivot-table

我有一个数据集,希望将其作为时间序列数据进行可视化处理。

import pandas as pd
import numpy as np

df = pd.read_excel('mypath.xlsx', usecols=['Account', 'Jan', 'Feb', 'Mar'])

df

Account Jan Feb Mar
0   300 NaN NaN NaN
1   310 -33 -33 -33
2   320  10   5   7

现在,我想透视此数据框,以将“帐户”列作为第一行,理想情况下将“月”(1月,2月,3月)作为索引并转换为period_index,因此我可以计算时间增量等。 / p>

所以我这样做:

df = df.pivot_table(df, columns = ['Account'], fill_value = 0)

Account 300 310 320 
Feb       0 -33   5
Jan       0 -33  10
Mar       0 -33   7

在该示例中,如何使1月,2月,3月成为period_index,并像实际索引一样工作?

############################

获得period_index的解决方案如下:

idx = pd.to_datetime('2018-' + df.index)
print(idx)

[OUT]
DatetimeIndex(['2018-02-01', '2018-01-01', '2018-03-01'], dtype='datetime64[ns]', freq=None)

现在转换为period_index格式

df.index = idx.to_period(freq='M')
print(df.index)

[OUT]
PeriodIndex(['2018-02', '2018-01', '2018-03'], dtype='period[M]', freq='M')

最终看起来像这样:

Account 300 310 320 
2018-02   0 -33   5
2018-01   0 -33  10
2018-03   0 -33   7

2 个答案:

答案 0 :(得分:1)

您只需将索引修改为-

df.index = pd.to_datetime('2018-' + df.index)

因此,如果您的行索引按照问题中所示的顺序混乱,那么您也可以将其转换为大熊猫日期时间。

答案 1 :(得分:1)

使用pandas.date_range + Index.map

df.index = (
    df.index.map({v.strftime("%b") : v for v in pd.date_range("2018-01", "2018-03", freq="MS")})
)

df.index
Out[617]: DatetimeIndex(['2018-02-01', '2018-01-01', '2018-03-01'], dtype='datetime64[ns]', freq=None)