我有以下数据框

data = pd.DataFrame({
'date': [1988, 1989, 1990, 1991],
'value': [11558522, 12323552, 13770958, 18412280]
}) 

Out[1]: 
   date     value
0  1988  11558522
1  1989  12323552
2  1990  13770958
3  1991  18412280

然后我将日期列更改为日期时间索引

data['date'] = pd.to_datetime(data['date'],format = '%Y')

Out[2]: 
        date     value
0 1988-01-01  11558522
1 1989-01-01  12323552
2 1990-01-01  13770958
3 1991-01-01  18412280

我将日期列设置为索引

data = data.set_index('date')

Out[3]: 

date          value      
1988-01-01  11558522
1989-01-01  12323552
1990-01-01  13770958
1991-01-01  18412280

现在我想取一个日期值,即 1988 并创建月份( 01 到 12 )并取该日期的值(11558522)并将其划分为 12 个月。 所以最终我希望数据集看起来像这样

    date          value      
1988-01-01  889117.077
1988-02-01  889117.077
1988-03-01  889117.077
1988-04-01  889117.077
      ...
1988-12-01  889117.077
1989-01-01  947965.538
1989-02-01  947965.538
1989-03-01  947965.538
1989-04-01  947965.538
      ...
1989-12-01  947965.538
etc..

我想为数据框中的每个日期值执行此操作。 我怎样才能最好地做到这一点?

#1楼 票数:0 已采纳

对所有年份的所有组合使用itertools.productDataFrame.merge按原始所有行:

data = pd.DataFrame({
'date': [1988, 1989, 1990, 1991],
'value': [11558522, 12323552, 13770958, 18412280]
}) 

from  itertools import product

y = data['date']
m = np.arange(1,13)
d = [1]

cols = ['year','month','day']
df = (pd.DataFrame(list(product(y, m, d)), columns=cols)
        .merge(data.rename(columns={'date':'year'}))
        .assign(value = lambda x: x['value'] / 12))

df = df.set_index(pd.to_datetime(df[cols])).drop(cols, axis=1)
print (df.head())
                    value
1988-01-01  963210.166667
1988-02-01  963210.166667
1988-03-01  963210.166667
1988-04-01  963210.166667
1988-05-01  963210.166667

另一个想法是使用字典映射的列value创建系列:

data = pd.DataFrame({
'date': [1988, 1989, 1990, 1991],
'value': [11558522, 12323552, 13770958, 18412280]
}) 


from  itertools import product

di = data.set_index('date')['value'].to_dict()
y = data['date']
m = np.arange(1,13)

comp = {f'{y}-{m}-01': di.get(y) for y,m,d in product(y, m, d)}
df = pd.Series(comp).div(12).to_frame('value')
df.index = pd.to_datetime(df.index)
print (df.head())
                    value
1988-01-01  963210.166667
1988-02-01  963210.166667
1988-03-01  963210.166667
1988-04-01  963210.166667
1988-05-01  963210.166667

  ask by Tamarie translate from so

未解决问题?本站智能推荐:

1回复

在具有日期时间值的日期帧上应用 DatetimeIndex 作为过滤器

好的,所以我只是在学习使用 DatetimeIndex 和 Dateframe 对象。 我遇到了一个我无法直接看到解决方案的新问题,我希望有人可能使用我可能还不知道的 Pandas 函数有一个优雅的解决方案。 情况如下:一方面,我有一个非常大的数据框,有很多行和几列,包括一个名为starttime
2回复

每个单元格中索引值和列名之间具有日期差异的数据框

我有一个包含一列的数据框,称为maturity_dates。 我还有一个 DateTimeIndex,称为模拟日期。 我想创建一个数据框,其中每个单元格都是模拟日期值减去 MAT_DATE。 此外,我希望该数字最小为 0,并以年为单位表示。 下面的代码完成了这项工作,但在大型数据帧上速度非常慢。
1回复

Pandas:使用日期列表和DateTimeIndex访问数据

我有一个带有DateTimeIndex的pandas DataFrame: 我想使用日期列表提取给定日期yyyy-mm-dd所有数据: ['2016-04-25','2016-04-28',...] 我尝试了以下方法: 我想检索此列表中给出的日期的所有数据(一整天的数据)
1回复

如何从日期范围中选择数据

我有以下日期时间索引和数据框对象: 它是基于每周的数据,每个柱形图都是金融市场上的每周柱形图。 例如,我想为每个df行选择每日酒吧 最后,它应该是数据帧列表。 存在来自每日柱线的所有数据。 我的问题是如何找到每周酒吧的开始日期,然后可以使用切片,例如[from_date
1回复

切片日期时间索引数据帧

我是python和pandas的新手。 我正在尝试编写一些代码,其中我将按日期时间索引的 Pandas 数据帧的倒数第二行与数据帧的最后一行进行比较。 但是,我无法正确比较索引。 例如,对于数据帧 生成数据框 我正在尝试比较 我试过使用 但我收到一个错误 似乎 Datetim
1回复

将熊猫日期索引移至下个月

我有一个带有日期索引的数据框。 我想创建一个具有滞后值的新列。 也就是说,laggedfoo(1aug2016)= foo(1july2016) 我使用了dataframe.shift,但是它没有达到预期的效果。 我可以破解它,但是我想我缺少关于如何处理和更改日期索引的全局视图。
2回复

数据框中日期的平均值

我有以下数据框 在 python 中有没有一种方法可以平均一整个月的值,然后将其作为该月的新值,即我想平均 1988-01 的值,并将其作为 1988-01 的最终值。 我尝试了 groupby 方法,但没有用
2回复

我是否必须按时间顺序对日期进行排序才能使用 pandas.DataFrame.ewm?

我需要从 csv 文件中计算一组数据的EMA ,其中日期descending order 。 当我应用pandas.DataFrame.ewm我会得到等于该值的最新(按日期)的 EMA。 这是因为ewm在DataFrame ewm开始观察。 到目前为止,我找不到将其反转为ewm选项。 所以我想,