按组重新编制熊猫时间序列索引

时间:2015-11-12 23:30:17

标签: python pandas time-series dataframe

所以我要做的是重新索引一个DataFrame,它在框架内有一堆独立的组。每个人都有自己的索引,我想添加一个月末索引。我认为最好的例子是:

鉴于此DataFrame:

In [72]: a = {'2014-01-02': {'A': 1}, '2014-02-03': {'A': 1}, '2014-03-05': {'A': 1}}

In [74]: b = {'2015-01-02': {'A': 2}, '2015-02-03': {'A': 2}, '2015-03-05': {'A': 2}}
In [76]: pd.DataFrame.from_dict(a,orient='index').append(pd.DataFrame.from_dict(b,orient='index'))
Out[76]:
            A
2014-01-02  1
2014-02-03  1
2014-03-05  1
2015-01-02  2
2015-02-03  2
2015-03-05  2

(注意2014年与2015年)

我想在“A”列中取两个组,并重新索引每个组以包括每个组的月末,从最小值到索引最大值之后的月末。我想要一个像这样的输出:

            A
2014-01-02  1
2014-01-31  1
2014-02-03  1
2014-02-28  1
2014-03-05  1
2014-03-31  1
2015-01-02  2
2015-01-31  2
2015-02-03  2
2015-02-28  2
2015-03-05  2
2015-03-31  2

2 个答案:

答案 0 :(得分:1)

In [59]:
df.index = pd.to_datetime(df.index , format = '%Y-%m-%d')
df
Out[59]:
            A
2014-01-02  1
2014-02-03  1
2014-03-05  1
2015-01-02  2
2015-02-03  2
2015-03-05  2

In [61]:
month_end = df.resample('M').dropna()
month_end
Out[61]:
            A
2014-01-31  1
2014-02-28  1
2014-03-31  1
2015-01-31  2
2015-02-28  2
2015-03-31  2

In [64]:
pd.concat([df , month_end]).sortlevel(0)
Out[64]:
            A
2014-01-02  1
2014-01-31  1
2014-02-03  1
2014-02-28  1
2014-03-05  1
2014-03-31  1
2015-01-02  2
2015-01-31  2
2015-02-03  2
2015-02-28  2
2015-03-05  2
2015-03-31  2

答案 1 :(得分:0)

首先,为您的数据框提供别名

df = pd.DataFrame.from_dict(a,orient='index').append(pd.DataFrame.from_dict(b,orient='index'))

接下来,将行名重置为索引

df.reset_index(level=0, inplace=True)

现在,检查数据框的索引

list(df.columns.values)

现在这是多索引的,所以" A"是一个索引,聚合函数将针对该附加索引级别进行操作。