2017-02-07 85 views
1

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

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] 
} 

是大数据集,所以我想避免循环,我想直接在熊猫/ numpy中做到这一点。

任何人都可以帮助我。

预先感谢您

回答

0

不知道什么箭头,但我会尽量保持在大熊猫/ 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]} 
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