2016-05-03 5 views
5

私は、次のデータフレームがあります。matplotlibを使用するためのパンダデータフレームのタプル値の抽出方法は?

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

x = np.arange(10) 
x = np.concatenate((x,x)) 
y = [] 
for i in range(2): 
    y.append(np.random.random_integers(0,10,20)) 

d = {'A': [(x[i], y[0][i]) for i in range(20)], 
    'B': [(x[i], y[1][i]) for i in range(20)]} 
df = pd.DataFrame(d, index = list('aaaaaaaaaabbbbbbbbbb')) 

DF

A  B 
a (0, 2) (0, 10) 
a (1, 0) (1, 8) 
a (2, 3) (2, 8) 
a (3, 7) (3, 8) 
a (4, 8) (4, 10) 
a (5, 2) (5, 0) 
a (6, 1) (6, 4) 
a (7, 3) (7, 9) 
a (8, 4) (8, 4) 
a (9, 4) (9, 10) 
b (0, 0) (0, 3) 
b (1, 2) (1, 10) 
b (2, 8) (2, 3) 
b (3, 1) (3, 7) 
b (4, 6) (4, 1) 
b (5, 8) (5, 3) 
b (6, 1) (6, 4) 
b (7, 1) (7, 1) 
b (8, 2) (8, 7) 
b (9, 9) (9, 3) 

どのように私は、次のプロットを作るのですか?

プロット1は、列 'A'、2行(インデックス= 1の行、インデックス= bの1行)にあり、x値はタプルの最初の要素です。 y値はタプルの2番目の要素です。

プロット2「column'B上で、残りは私がデータフレーム内のタプルから値を抽出する方法を見つけ出すことはできませんプロット1.

と同じです。

さらに、この場合、グループに役立つでしょうか?

実際には、私は約1000のデータ列、5つのグループ、各グループ〜500の行を持っています。だから私は、この(データフレームサイズ〜2500×1000)ここではたくさん

+0

あなたは少し周りいじるする必要がありますが、何か 'np.rollaxis(np.vstack(df.values.flatten()のような場合があります) .reshape(2,20,2)、2) 'は、簡単にプロッティングするデータを指定するように簡単に索引付けできる3D配列を得ることができます(おそらく、その行を少し短くて読みやすくすることができます同じように)。 – Evert

答えて

6

zipを使用してタプルを解凍する方法です

感謝を解決する簡単な方法を探しています。各列の*unpacks the argument list

df['A.x'], df['A.y'] = zip(*df.A) 
df['B.x'], df['B.y'] = zip(*df.B) 

>>> df.head() 
     A  B A.x A.y B.x B.y 
a (0, 6) (0, 0) 0 6 0 0 
a (1, 8) (1, 4) 1 8 1 4 
a (2, 8) (2, 5) 2 8 2 5 
a (3, 5) (3, 2) 3 5 3 2 
a (4, 2) (4, 4) 4 2 4 4 
0

私はあなただけindexing with strを使用することができると思う:

df['a1'], df['a2'] = df['A'].str[0], df['A'].str[1] 
df['b1'], df['b2'] = df['B'].str[0], df['B'].str[1] 

print (df) 
     A  B a1 a2 b1 b2 
a (0, 5) (0, 1) 0 5 0 1 
a (1, 0) (1, 5) 1 0 1 5 
a (2, 3) (2, 9) 2 3 2 9 
a (3, 3) (3, 8) 3 3 3 8 
a (4, 7) (4, 9) 4 7 4 9 
a (5, 9) (5, 4) 5 9 5 4 
a (6, 3) (6, 3) 6 3 6 3 
a (7, 5) (7, 0) 7 5 7 0 
a (8, 2) (8, 3) 8 2 8 3 
a (9, 4) (9, 5) 9 4 9 5 
b (0, 7) (0, 0) 0 7 0 0 
b (1, 6) (1, 2) 1 6 1 2 
b (2, 8) (2, 3) 2 8 2 3 
b (3, 8) (3, 8) 3 8 3 8 
b (4, 10) (4, 1) 4 10 4 1 
b (5, 1) (5, 3) 5 1 5 3 
b (6, 6) (6, 3) 6 6 6 3 
b (7, 7) (7, 3) 7 7 7 3 
b (8, 7) (8, 7) 8 7 8 7 
b (9, 8) (9, 0) 9 8 9 0 
+0

あなたより。 –

+0

ありがとうございます。 pd.pivotとdf.pivotの違いは何ですか?あなたの回答では、pd.pivotを使用します。私はdf.pivotを試みましたが、「インデックスは範囲外です」と言います。ありがとう。 –

関連する問題