【问题标题】:Iterating through date ranges and sum the values遍历日期范围并对值求和
【发布时间】:2020-04-07 00:51:26
【问题描述】:

出于 stackoverflow 的目的,我将为value1value2 制作一些每天 2 年的时间序列数据。

import numpy as np
import pandas as pd
np.random.seed(11)

rows,cols = 730,2
data = np.random.rand(rows,cols) 
tidx = pd.date_range('2017-11-15', periods=rows, freq='D') 

df = pd.DataFrame(data, columns=['value1','value2'], index=tidx)

下面的这个嵌套字典是我用手指捏在一起的东西,我试图在这些日期范围之间对值 1 和 2 求和。我的真实世界示例(水电费)恰好在每个月的 15 日开始到 14 日结束,但这几乎总是因账户而异。嵌套字典名称等于嵌套字典中列出的第二个日期。 (希望这是有道理的)

dates = {
    'dec17' : {'11-15-2017' : '12-14-2017'},
    'jan18' : {'12-15-2017' : '01-14-2018'},
    'feb18' : {'01-15-2018' : '02-14-2018'},
    'mar18' : {'02-15-2018' : '03-14-2018'},
    'apr18' : {'03-15-2018' : '04-14-2018'},
    'may18' : {'04-15-2018' : '05-14-2018'},
    'jun18' : {'05-15-2018' : '06-14-2017'},
    'jul18' : {'06-15-2018' : '07-14-2018'},
    'aug18' : {'07-15-2018' : '08-14-2018'},
    'sep18' : {'08-15-2018' : '09-14-2018'},
    'oct18' : {'09-15-2018' : '10-14-2018'},
    'nov18' : {'10-15-2018' : '11-14-2018'},
    'dec18' : {'11-15-2018' : '12-14-2018'},
    'jan19' : {'12-15-2018' : '01-14-2019'},
    'feb19' : {'01-15-2019' : '02-14-2019'},
    'mar19' : {'02-15-2019' : '03-14-2019'},
    'apr19' : {'03-15-2019' : '04-14-2019'},
    'may19' : {'04-15-2019' : '05-14-2019'},
    'jun19' : {'05-15-2019' : '06-14-2019'},
    'jul19' : {'06-15-2019' : '07-14-2019'},
    'aug19' : {'07-15-2019' : '08-14-2019'},
    'sep19' : {'08-15-2019' : '09-14-2019'},
    'oct19' : {'09-15-2019' : '10-14-2019'},
    'nov19' : {'10-15-2019' : '11-14-2019'}
}

如何将这些汇总值放入 pandas 数据框中,其中行名 == 汇总数据的嵌套字典名称?我不确定使用嵌套字典是否是正确的路径。任何提示都非常感谢您提供更好的解决疯狂的方法。

def myprint(d):
    for k, v in d.items():
        if isinstance(v, dict):
            myprint(v)
        else:
            print("{0} : {1}".format(k, v))

编辑 在我的真实世界示例中,我可以在下面总结一个日期范围,但我希望创建某种循环/自动化过程...... weath.loc['11-15-2017' : '12-14-2017'].sum()

【问题讨论】:

  • 请注意,您的字典中有重复的键,它将替换现有的键
  • 哎呀,这行不通
  • 另外请添加预期输出
  • 我进行了编辑。
  • 我建议您简化示例,并添加预期的输出。目前似乎还不清楚

标签: python pandas


【解决方案1】:

使用简单的结构来存储日期范围,然后,

>>> dates = {'dec17': ('11-15-2017', '12-14-2017'), 'jan18': ('12-15-2017', '01-14-2018')}
>>> odf = pd.DataFrame()
>>> for name, date_range in dates.items():
...     start, end = date_range
...     print(df.loc[start:end].sum().to_frame().T)
... 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多