2017-08-01 17 views
1

日付の文字列、ラベル、値の列を持つpandas DataFrameにデータをインポートしようとしています。私のデータは、だから、(わずか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)) 

のように見える、データは、キー日付、キーインデックスはラベルである値のリストです辞書です。

DATAFRAME

df1 = pd.DataFrame(data) 

に、このデータ構造をロードすると、私の列として、日付、インデックスとしてラベル、および値として値を与えます。

代替ロードは、日付がインデックスされている、と列がラベルである

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

だろう。

どちらの場合でも、私は好みのビューにピボットまたはスタッキングすることができます。

私が望むビューを得るためにピボット/スタッキングにどのようにアプローチすればよいですか?データフレームをDataFrameにロードする前にデータ構造を変更する必要がありますか?特に、zipへの呼び出しを使用して、テーブルのすべての行を事前に作成する必要がないようにしたいと思います。

+0

'pd.DataFrame(data).transpose()'はあなたのニーズを満たしていますか? – Clusks

+0

これは、 'orient = 'index''オプションで' from_dict'を使用した場合と同じように私に同じDataFrameを与えます。 –

答えて

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 
関連する問題