2017-08-01 198 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