2013-03-17 19 views
37

मैं पांडस सीखना शुरू कर रहा हूं और कुछ कार्यों को करने के लिए सबसे पाइथोनिक (या पांडा-थोनिक?) तरीके खोजने की कोशिश कर रहा हूं।पांडस समूह के 0 प्लॉटिंग परिणाम

मान लीजिए हम कॉलम के साथ एक DataFrame है ए, बी, और सी

  • स्तम्भ A बूलियन मूल्यों में शामिल है: प्रत्येक पंक्ति एक मूल्य सही या गलत है।
  • कॉलम बी में कुछ महत्वपूर्ण मूल्य हैं जिन्हें हम साजिश करना चाहते हैं।

क्या हमें पता चलता है करना चाहते पंक्तियों को गलत पर एक सेट है, पंक्तियों को एक सच्चे है के लिए बनाम बी मूल्यों के लिए बी मूल्यों के बीच सूक्ष्म भेद है।

दूसरे शब्दों में, मैं स्तंभ ए (या तो सत्य या गलत) के मान से समूह कैसे कर सकता हूं, फिर उसी ग्राफ पर दोनों समूहों के लिए कॉलम बी के मानों को प्लॉट कर सकता हूं? अंक को अलग करने में सक्षम होने के लिए दो डेटासेट को अलग-अलग रंगीन किया जाना चाहिए।


आगे, इस कार्यक्रम के लिए एक और सुविधा जोड़ने करते हैं: रेखांकन से पहले, हम प्रत्येक पंक्ति के लिए एक और मूल्य की गणना और स्तंभ डी में संग्रहीत करना यह मान पूरे के लिए बी में संग्रहीत सभी डेटा का मतलब है चाहता हूँ एक रिकार्ड से पहले पांच मिनट - लेकिन हम केवल पंक्तियों ए

दूसरे शब्दों में, में जमा हो जाती है, तो मैं एक पंक्ति है एक ही बूलियन मान है कि शामिल हैं जहां A=True और time=t, मैं स्तंभ डी के लिए एक मूल्य की गणना करना चाहते हैं कि समय t-5 से t के सभी रिकॉर्ड के लिए बी का मतलब है जिसमें A=True है।

इस मामले में, हम ए के मूल्यों पर समूह को कैसे निष्पादित कर सकते हैं, फिर प्रत्येक समूह को यह गणना लागू करें, और आखिरकार दो समूहों के लिए डी मानों को प्लॉट करें?

+4

आप कुछ उदाहरण dataframes है: मैं बस विवरण बाहर मांस करेंगे? ऐसा लगता है कि आप समूहबी ऑब्जेक्ट को एक वेरिएबल में सहेजने जैसे कुछ कर सकते हैं: 'grouped = df.groupby (' ए ')', फिर प्लॉट करने के लिए फॉर-लूप करें: 'जी के लिए, समूह में डी: साजिश (डी [ 'बी'], रंग = जी) '। दूसरे प्रश्न के लिए एक ही चीज़ कम या ज्यादा, जहां आप नया कॉलम डी – herrfz

उत्तर

42

मुझे लगता है कि @herrfz सभी उच्च अंक हिट करता है।

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

sin = np.sin 
cos = np.cos 
pi = np.pi 
N = 100 

x = np.linspace(0, pi, N) 
a = sin(x) 
b = cos(x) 

df = pd.DataFrame({ 
    'A': [True]*N + [False]*N, 
    'B': np.hstack((a,b)) 
    }) 

for key, grp in df.groupby(['A']): 
    plt.plot(grp['B'], label=key) 
    grp['D'] = pd.rolling_mean(grp['B'], window=5)  
    plt.plot(grp['D'], label='rolling ({k})'.format(k=key)) 
plt.legend(loc='best')  
plt.show() 

enter image description here

+0

बनाने के लिए पांडा 'रोलिंग_मेमन' का उपयोग कर सकते हैं यह सही है! क्या आप डी कॉलम के लिए अधिक अनुकूलित कंप्यूटेशंस को कार्यान्वित करने के तरीके को स्पर्श कर सकते हैं, अगर कहें कि मैं कुछ विशेष गणना करना चाहता हूं जो अंतर्निहित "रोलिंग" पांडस फ़ंक्शन द्वारा कवर नहीं है? धन्यवाद। (@herrfz) –

+0

'rolling_mean' [पांडस में कई रोलिंग फ़ंक्शंस] में से एक है (http://pandas.pydata.org/pandas-docs/stable/computation.html#moving-rolling-statistics-moments)। कस्टम रोलिंग फ़ंक्शन को परिभाषित करने के लिए, 'rolling_apply' का उपयोग करें। लिंक किए गए पेज पर एक उदाहरण है। – unutbu

+0

धन्यवाद। मुझे उस उदाहरण को अपनाने में परेशानी हो रही है जो मैं पूरा करने की कोशिश कर रहा हूं, इसलिए मैंने यहां एक और सवाल पूछा: http://stackoverflow.com/questions/15487022/customizing-rolling-apply-function-in-python-pandas –

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