2016-05-03 3 views
5

मैं निम्नलिखित dataframe है: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 कॉलम 'ए', 2 लाइनों (इंडेक्स = ए के लिए एक पंक्ति, इंडेक्स = बी के लिए एक पंक्ति) पर है, एक्स मान tuples के पहले तत्व हैं। y मान tuple के दूसरे तत्व हैं।

प्लॉट 2 column'B पर है ', बाकी भूखंड 1.

मैं समझ नहीं कैसे मैं dataframe में tuples से मान एक्सट्रैक्ट कर सकते हैं के रूप में ही है।

इसके अतिरिक्त, समूह इस मामले में सहायक होंगे?

असल में, मेरे पास डेटा के बारे में हजारों कॉलम, 5 समूह, प्रत्येक समूह ~ 500 पंक्तियां हैं। तो मैं एक त्वरित तरीका है यह (dataframe आकार ~ 2500 x 1000) को हल करने के लिए देख रहा हूँ

धन्यवाद एक बहुत

+0

आप थोड़ा बेला के आसपास हो सकता है, लेकिन कुछ ऐसे 'np.rollaxis (np.vstack (df.values.flatten()) .reshape (2, 20, 2), 2) 'आपको एक 3 डी सरणी मिल सकती है जिसे आप आसानी से इंडेक्स कर सकते हैं ताकि आप उस डेटा को बिल्कुल निर्दिष्ट कर सकें जिसे आप प्लॉट करना चाहते हैं (और संभवतः, आप उस रेखा को थोड़ा छोटा और अधिक पठनीय प्राप्त कर सकते हैं भी)। – Evert

उत्तर

6

यहाँ zip का उपयोग कर अपने tuples खोल करने के लिए कैसे है। प्रत्येक कॉलम के *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 की कोशिश की लेकिन यह कहता है "सूचकांक सीमा से बाहर हैं"। धन्यवाद। –

संबंधित मुद्दे