【问题标题】:Reindexing Pandas Timeseries by group按组重新索引 Pandas 时间序列
【发布时间】:2015-11-12 23:30:16
【问题描述】:

所以我想要做的是重新索引一个 DataFrame,它在框架内有一堆单独的组。每个都有自己的索引,我想在其中添加一个 End of Month 索引。我认为一个例子是最好的:

鉴于此 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

【问题讨论】:

  • 您需要在数据框上使用“多索引”。查看 pandas 文档中的“多索引”将是一个很好的起点。

标签: python pandas time-series dataframe


【解决方案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

【讨论】:

  • 我接受了这一点,但也遇到了问题。如果同一个月有两个,现在使用 A 的平均值。在这种情况下,有没有办法让它输入两个条目,一个对应 1,一个对应 2?
  • if you have two in the same month 是什么意思?
  • 如果 A == 1 在索引中有 2015-02-04 并且 A == 2 在索引中有 2015-02-05
【解决方案2】:

首先,给你的数据框一个别名

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”是一个索引,聚合函数将针对该附加索引级别进行操作。

【讨论】:

    猜你喜欢
    • 2021-03-22
    • 2018-11-06
    • 1970-01-01
    • 2017-12-14
    • 2021-12-09
    • 2012-11-19
    • 2013-08-12
    • 2018-08-17
    • 2020-04-12
    相关资源
    最近更新 更多