python - 如何将每月数据转换为每周数据并保持其他列不变

标签 python pandas datetime

我有一个数据框如下。

pd.DataFrame({'Date':['2020-08-01','2020-08-01','2020-09-01'],'value':[10,12,9],'item':['a','d','b']})

我想将其转换为每周数据,使除“日期”列之外的所有列保持不变。

预期输出

pd.DataFrame({'Date':['2020-08-01','2020-08-08','2020-08-15','2020-08-22','2020-08-29','2020-08-01','2020-08-08','2020-08-15','2020-08-22','2020-08-29','2020-09-01','2020-09-08','2020-09-15','2020-09-22','2020-09-29'],
          'value':[10,10,10,10,10,12,12,12,12,12,9,9,9,9,9],'item':['a','a','a','a','a','d','d','d','d','d','b','b','b','b','b']})

它应该能够将任何月份数据转换为每周数据。输入数据框中的日期始终是该月的第一天。 我怎样才能做到这一点? 提前致谢。

最佳答案

由于所需的新日期时间索引是不规则的(在每个月的 1 号重新开始),因此可以选择迭代创建索引:

df = pd.DataFrame({'Date':['2020-08-01','2020-09-01'],'value':[10,9],'item':['a','b']})

df = df.set_index(pd.to_datetime(df['Date'])).drop(columns='Date')

dti = pd.to_datetime([]) # start with an empty datetime index
for month in df.index: # for each month, add a 7-day step datetime index to the previous
    dti = dti.union(pd.date_range(month, month+pd.DateOffset(months=1), freq='7d'))

# just reindex and forward-fill, no resampling needed
df = df.reindex(dti).ffill()
df
            value item
2020-08-01   10.0    a
2020-08-08   10.0    a
2020-08-15   10.0    a
2020-08-22   10.0    a
2020-08-29   10.0    a
2020-09-01    9.0    b
2020-09-08    9.0    b
2020-09-15    9.0    b
2020-09-22    9.0    b
2020-09-29    9.0    b

关于python - 如何将每月数据转换为每周数据并保持其他列不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64664950/

相关文章:

python - 将多列中的值汇总到字典中定义的组中

python - 在 Pandas 中高效地进行行间计算

python - 将日期列和时间列合并为日期时间列

java - 将 Joda 日期时间字符串转换为 Java.Sql.TimeStamp 以进行 INSERT

java - 如何在 Java 7 中将具有 UTC 偏移量的日期时间值转换为 GMT

python - 有效整合concurrent.futures并行执行的结果?

python - 使用 NumPy 计算向量中的值

python - 如何使其他输入起作用,它只显示第一个选择的结果

python - 使用 BeautifulSoup 制作 requests.post 来访问子页面?

python - Pandas 分组 : how to calculate percentage of total?