根据日期创建每月重新采样的 Pandas DataFrame

Posted

技术标签:

【中文标题】根据日期创建每月重新采样的 Pandas DataFrame【英文标题】:Create monthly resampled Pandas DataFrame based on dates 【发布时间】:2021-12-14 13:42:53 【问题描述】:

我正在努力尝试将包含多个日期时间列的数据框转换为具有日期范围的版本。

一个较小的例子看起来有点像这样:

所以来自:

   key  date_upgrade1 date_upgrade2
0  key1 2020-07-31 2020-08-31
1  key2 2020-05-31 NaT

到:

    month       key upgrade1 upgrade2
0   2020-06-01  key1    0   0
1   2020-07-01  key1    0   0
2   2020-08-01  key1    1   0
3   2020-09-01  key1    1   1
4   2020-06-01  key2    1   0
5   2020-07-01  key2    1   0
6   2020-08-01  key2    1   0
7   2020-09-01  key2    1   0

如果升级尚未完成,则升级 1 和升级 2 为“0”,如果已执行升级,则为“1”。

其实我现在很迷茫。我设法创建了空的 date_range 数据框。但我不确定如何为多个键复制它并将升级日期后的所有值更改为 1。

感谢任何帮助。

【问题讨论】:

为什么key2 会延长到 9 月,而原始框架中的最新日期是 5 月 31 日,这会变成 6 月 1 日?另外,为什么 upgrade1 对于 7 月到 9 月的日期 key2 为 true? 好问题,我真的没有说清楚第二个DataFrame中的“0”和“1”到底是什么意思。第二个 DataFrame 告诉我是否已经执行了升级。所以这些升级是一次性事件。 【参考方案1】:

同时我自己回答了这个问题:

df = [
        df1.assign(month=t)
        for t in pd.date_range(first_date, now, freq='MS')
    ]

df = pd.concat(df)
df.reset_index(drop=True, inplace=True)

df["upgrade1"] = df.month.gt(df.date_upgrade1).astype('int')
df["upgrade2"] = df.month.gt(df.date_upgrade2).astype('int')

将 df1 定义为上层 DataFrame。

【讨论】:

以上是关于根据日期创建每月重新采样的 Pandas DataFrame的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 在日期列上重新采样

用最少的观察次数对 Pandas 重新采样

Pandas 将 5 分钟数据重新采样为每小时平均值:日期问题 [重复]

Pandas 重新采样开始日期

在 pandas 中有效地聚合重新采样的日期时间集合

pandas 重新采样以获得具有时间序列数据的月平均值