2017-08-01 105 views
1

我试图导入数据到一个熊猫数据框,列是日期字符串,标签,值。我的数据如下所示(只是4日和5个标签)大熊猫摆动/堆叠/重塑

from numpy import random 
import numpy as np 
import pandas as pd 

# Creating the data 
dates = ("2015-01-01", "2015-01-02", "2015-01-03", "2015-01-04") 
values = [random.rand(5) for _ in range(4)] 

data = dict(zip(dates,values)) 

因此,该数据是一本字典,其中键是日期,密钥的其中指数是标签值的列表。

加载这些数据结构到一个数据帧

df1 = pd.DataFrame(data) 

给我的日期为列,标签为指标,其值作为值。

另一种负荷将

df2 = pd.DataFrame() 
df2.from_dict(data, orient='index') 

在日期索引和列标签。

无论是哪种情况下,我是否设法摆动或堆叠到我的首选视图。

我应该如何处理pivoting/stacking以获得我想要的视图?还是应该在将数据结构加载到DataFrame中之前更改其数据结构?特别是我想避免必须事先通过使用zip的一堆调用来创建表的所有行。

+0

'pd.DataFrame(data).transpose()'是否符合您的需求? – Clusks

+0

这给了我相同的DataFrame,就好像我会用'from_dict'和'orient ='index''选项一样。 –

回答

2

IIUC:

选项1
pd.DataFrame.stack

pd.DataFrame(data).stack() \ 
    .rename('value').rename_axis(['label', 'date']).reset_index() 

    label  date  value 
0  0 2015-01-01 0.345109 
1  0 2015-01-02 0.815948 
2  0 2015-01-03 0.758709 
3  0 2015-01-04 0.461838 
4  1 2015-01-01 0.584527 
5  1 2015-01-02 0.823529 
6  1 2015-01-03 0.714700 
7  1 2015-01-04 0.160735 
8  2 2015-01-01 0.779006 
9  2 2015-01-02 0.721576 
10  2 2015-01-03 0.246975 
11  2 2015-01-04 0.270491 
12  3 2015-01-01 0.465495 
13  3 2015-01-02 0.622024 
14  3 2015-01-03 0.227865 
15  3 2015-01-04 0.638772 
16  4 2015-01-01 0.266322 
17  4 2015-01-02 0.575298 
18  4 2015-01-03 0.335095 
19  4 2015-01-04 0.761181 

选项2
理解

pd.DataFrame(
    [[i, d, v] for d, l in data.items() for i, v in enumerate(l)], 
    columns=['label', 'date', 'value'] 
) 

    label  date  value 
0  0 2015-01-01 0.345109 
1  1 2015-01-01 0.584527 
2  2 2015-01-01 0.779006 
3  3 2015-01-01 0.465495 
4  4 2015-01-01 0.266322 
5  0 2015-01-02 0.815948 
6  1 2015-01-02 0.823529 
7  2 2015-01-02 0.721576 
8  3 2015-01-02 0.622024 
9  4 2015-01-02 0.575298 
10  0 2015-01-03 0.758709 
11  1 2015-01-03 0.714700 
12  2 2015-01-03 0.246975 
13  3 2015-01-03 0.227865 
14  4 2015-01-03 0.335095 
15  0 2015-01-04 0.461838 
16  1 2015-01-04 0.160735 
17  2 2015-01-04 0.270491 
18  3 2015-01-04 0.638772 
19  4 2015-01-04 0.761181