【问题标题】:Pandas date_range to nested json熊猫 date_range 到嵌套 json
【发布时间】:2017-02-07 20:31:15
【问题描述】:

我想从 pandas date_range 获取一个嵌套字典。字典的键应该是日期和值,是所选范围内所有值的列表。例如:

import numpy as np
import pandas as pd
import arrow

mymatrix = pd.DataFrame([
[pd.Timestamp(arrow.get('01-01-2017 01:01:00', 'DD-MM-YYYY HH:mm:ss').naive), 5],
[pd.Timestamp(arrow.get('01-01-2017 00:02:00', 'DD-MM-YYYY HH:mm:ss').naive), 10],
[pd.Timestamp(arrow.get('01-01-2017 00:03:00', 'DD-MM-YYYY HH:mm:ss').naive), 20],
[pd.Timestamp(arrow.get('01-01-2017 00:04:00', 'DD-MM-YYYY HH:mm:ss').naive), 30]

])

我想得到类似的东西:

按分钟:

 {
      '01-01-2017 01:01:00': [5],
      '01-01-2017 00:02:00': [10],
      '01-01-2017 00:03:00': [20],
      '01-01-2017 00:04:00': [30]
 }

按小时:

 {
      '01-01-2017 01': [5],
      '01-01-2017 00: [10, 20, 30]
 }

适用于大型数据集,因此我想避免循环,我想直接在 pandas/numpy 中执行此操作。

谁能帮帮我。

提前谢谢你

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    不确定箭头是什么,但我会尝试将所有内容保存在 pandas/numpy 中。

    mymatrix = pd.DataFrame([
    [pd.Timestamp('01-01-2017 01:01:00'), 5],
    [pd.Timestamp('01-01-2017 00:02:00'), 10],
    [pd.Timestamp('01-01-2017 00:03:00'), 20],
    [pd.Timestamp('01-01-2017 00:04:00'), 30]])
    

    然后您可以设置索引并使用resample

    df = mymatrix.set_index(0)
    
                          1
    0                      
    2017-01-01 01:01:00   5
    2017-01-01 00:02:00  10
    2017-01-01 00:03:00  20
    2017-01-01 00:04:00  30
    
    df.resample('H').apply(lambda x: x.values.tolist()).to_dict()[1]
    
    {Timestamp('2017-01-01 00:00:00'): [10, 20, 30],
     Timestamp('2017-01-01 01:00:00'): [5]}
    

    【讨论】:

      【解决方案2】:

      试试这个:

      In [46]: x
      Out[46]:
                          0   1
      0 2017-01-01 01:01:00   5
      1 2017-01-01 00:02:00  10
      2 2017-01-01 00:03:00  20
      3 2017-01-01 00:04:00  30
      
      In [47]: x.groupby(x[0].dt.minute)[1].apply(list)
      Out[47]:
      0
      1     [5]
      2    [10]
      3    [20]
      4    [30]
      Name: 1, dtype: object
      
      In [48]: x.groupby(x[0].dt.hour)[1].apply(list)
      Out[48]:
      0
      0    [10, 20, 30]
      1             [5]
      Name: 1, dtype: object
      

      【讨论】:

        猜你喜欢
        • 2022-07-06
        • 2018-05-05
        • 2014-08-13
        • 1970-01-01
        • 2017-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多