2013-10-16 11 views
7

मैं एक dataframe एक व्यापारिक रणनीति से लिया ट्रेडों के साथ भरा है के साथ। ट्रेडिंग रणनीति में तर्क यह है कि व्यापार सुनिश्चित करने के लिए रणनीति एक व्यापार में पहले से ही है अगर नहीं लिया जाता है अपडेट करने की आवश्यकता है - लेकिन है कि एक अलग समस्या है। कई पिछले व्यापारों के लिए व्यापार डेटा एक सीएसवी फ़ाइल से डेटाफ्रेम में पढ़ा जाता है।तुलना पांडा Dataframe पंक्तियाँ और पंक्तियों गिराने ओवरलैप हुई तिथियों

यहां मेरे डेटा के लिए मेरी समस्या है: मुझे डेटाफ्रेम की पंक्ति-दर-पंक्ति तुलना करने की आवश्यकता है यह निर्धारित करने के लिए कि क्या पंक्ति का एंट्रीडेटेट ExitDate rowX-1 से कम है या नहीं।

अपने डेटा का एक नमूना:

Row 1: 
EntryDate ExitDate 
2012-07-25 2012-07-27 

Row 2: 
EntryDate ExitDate 
2012-07-26 2012-07-29 

पंक्ति 2 की जरूरत है हटा दिया है क्योंकि यह एक व्यापार घटित हो चुके नहीं मानना ​​चाहिए।

मैं की पहचान कौन-सी पंक्तियां डुप्लिकेट हैं समस्या हो रही है और फिर उन्हें छोड़ने। मैं कुछ भाग्य के साथ approach in answer 3 of this question कोशिश की, लेकिन क्योंकि मैं मैन्युअल dataframe के माध्यम से पुनरावृति और प्रत्येक पंक्ति के डेटा को पढ़ने के लिए यह आदर्श नहीं है। मेरा वर्तमान दृष्टिकोण नीचे है और जैसा कि हो सकता है बदसूरत है। मैं तिथियों की जांच करता हूं, और फिर उन्हें एक नए डेटाफ्रेम में जोड़ता हूं। इसके अतिरिक्त, यह दृष्टिकोण मुझे अंतिम डेटाफ्रेम में एकाधिक डुप्लिकेट देता है।

for i in range(0,len(df)+1): 
    if i+1 == len(df): break #to keep from going past last row 
    ExitDate = df['ExitDate'].irow(i) 
    EntryNextTrade = df['EntryDate'].irow(i+1) 

    if EntryNextTrade>ExitDate: 
     line={'EntryDate':EntryDate,'ExitDate':ExitDate} 
     df_trades=df_trades.append(line,ignore_index=True) 

इस बारे में कोई विचार या विचार इसे और अधिक कुशलतापूर्वक कैसे पूरा करें?

आप click here अपने डेटा का एक नमूना देखने के लिए कर सकते हैं अगर आप अपने वास्तविक dataframe पुन: पेश करने की कोशिश करना चाहते हैं।

+1

लूप से बचने से बचें! –

+0

हां। मुझे पता है ... लेकिन यह एकमात्र तरीका था जिसे मैं शुरू कर सकता था :) –

उत्तर

11

आप आपरेशन के इस प्रकार करने के लिए बूलियन मुखौटा किसी तरह का उपयोग करना चाहिए।

df['EntryNextTrade'] = df['EntryDate'].shift() 

उपयोग इस मुखौटा बनाने के लिए:

msk = df['EntryNextTrade'] > df'[ExitDate'] 

और LOC का उपयोग subDataFrame को देखने के लिए जहां एमएसके यह सच है

एक तरह से अगले व्यापार के लिए एक डमी स्तंभ बनाने के लिए है , और केवल निर्दिष्ट कॉलम:

df.loc[msk, ['EntryDate', 'ExitDate']] 
+0

धन्यवाद। अब कोशिश कर रहा है। मुझे पता था कि कुछ सरल था जिसका मैं उपयोग कर सकता था। –

+0

यह पूरी तरह से काम किया। बहुत सराहना की, मैं नए होने के कारण अप-वोट नहीं कर सकता लेकिन अगर मैं कर सकता। –

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