Pandas date_range到嵌套的json

时间:2017-02-07 20:31:15

标签: python pandas numpy

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

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中这样做。

任何人都可以帮助我。

提前谢谢

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

不确定箭头是什么,但我会尝试将所有内容保存在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]}