2013-06-08 14 views
5

में एकाधिक, असाइन किए गए डेटा-फ्रेम विलय करना मेरे पास स्टॉक मूल्यों के साथ कई डेटा-फ्रेम हैं जिन्हें मैं एक डेटा-फ्रेम में संरेखित करना चाहता हूं जिसमें सभी स्टॉक के लिए केवल नज़दीकी कीमतें हों।सिंगल पांडा डेटा-फ्रेम

मुझे उम्मीद है कि उस तारीख को किसी स्टॉक के लिए कोई करीबी मूल्य नहीं होने पर सभी डेटा-फ्रेम की तारीख सभी कॉलम (इंडेक्स) और "एनए" में मौजूद होगी।

दो डेटा फ्रेम (DF1 और df2) के साथ

उदाहरण:

In [9]: frame 
Out[9]: 
      df1.Close df2.Close 
Date1 
2012-01-01  22.30  22.30 
2012-01-02  NaN  21.24 
2012-01-03  21.24  NaN 
2012-01-04  22.16  22.16 
2012-01-05  24.04  NaN 
2012-01-06  NaN  24.04 
2012-01-07  NaN  21.04 

कैसे होगा:

In [5]: df1 
Out[5]: 
      Open High Low Close 
Date1 
2012-01-05 22.00 22.66 23.11 24.04 
2012-01-04 24.04 23.80 23.08 22.16 
2012-01-03 22.16 21.27 20.42 21.24 
2012-01-01 21.24 22.30 22.52 22.30 

In [7]: df2 
Out[7]: 
      Open High Low Close 
Date1 
2012-01-07 23.00 21.66 25.11 21.04 
2012-01-06 22.00 22.66 23.11 24.04 
2012-01-04 24.04 23.80 23.08 22.16 
2012-01-02 22.16 21.27 20.42 21.24 
2012-01-01 21.24 22.30 22.52 22.30 

अब मैं

In [8]: frame=pd.DataFrame({"df1.Close":df1["Close"], "df2.Close":df2["Close"]}) 

और परिणाम कर सकते हैं के रूप में उम्मीद है मुझे गतिशील डेटा-फ्रेम के लिए ऐसा करने के लिए अपना कोड बदलने की ज़रूरत है? अभी, मेरे पास 8 डेटा-फ्रेम हैं जिन्हें मुझे इस तरह संरेखित करने की आवश्यकता है। डेटा-फ्रेम की सूची के माध्यम से लूप करने का कोई तरीका है और उन्हें ऊपर की तरह संरेखित करना है - मैन्युअल रूप से डेटा-फ्रेम नामों को टाइप करने के बजाय (डीएफ [0] से कुछ डीएफ [7] रूपक रूप से बोलते हुए)?

अग्रिम और दयालु संबंध में धन्यवाद! डिर्क

उत्तर

4

आप एक सूची में डेटा फ्रेम (वास्तविक डेटा फ्रेम वस्तुओं, मेरा मतलब है, न उनके नाम) है कि कुछ इस तरह दिखता है:

dflist = [df1, df2, df3, df4, df5, df6, df7, df8] 

उसके बाद निम्न कोड क्या करना चाहिए यह क्या लगता है आप देख रहे हैं:

frame = {} 
for idx, df in enumerate(dflist): 
    n = idx+1 # Since lists are 0-indexed 
    name = "df{0:d}.Close".format(n) 
    close = df["Close"] 
    frame[name] = close 

आप एक dict समझ के साथ और अधिक दृढ़तापूर्वक ऐसा कर सकता है, लेकिन उदाहरण के कोड में मैं समझ में आसानी के लिए और अधिक स्पष्ट रूप से बाहर बातें वर्तनी पसंद करते हैं। संदर्भ के लिए, निर्देश की समझ कुछ इस तरह दिखाई देगी:

{"df{0:d}.Close".format(idx+1): df["Close"] for idx, df in enumerate(dflist)} 
+0

बहुत अच्छा, बहुत बहुत धन्यवाद! उस उदाहरण के साथ, मैं वहां आधा रास्ता हूँ। अब मैं उस "dflist" गतिशील कैसे बनाऊंगा? मुझे पता नहीं चलेगा कि मुझे कितने डेटा-फ्रेम की आवश्यकता होगी - इसलिए मुझे लगता है कि मैं गतिशील रूप से कई डेटा-फ्रेम बनाने और फिर अपना कोड उपयोग करने का एक तरीका ढूंढ रहा हूं। आपकी मदद के लिए बहुत धन्यवाद! – user1653205

+0

बस 'सूची() 'जैसी मानक सूची-मैनिपुलेशन विधियों का उपयोग करें - उदाहरण के लिए जब आपको कोई नया डेटा-फ्रेम मिलता है, तो' dflist.append (new_df) 'जैसे कुछ करें। – rmunn

+0

मुझे लगता है कि मैं करीब आ रहा हूं। अब मैंने डेटाफ्रेम को एक ऐसे टूल में लोड किया है जहां कुंजी स्टॉक का टिकर है और मूल्य स्टॉक के लिए ओएचएलसी उद्धरण के साथ डेटाफ्रेम है। अब मेरे पास 8 कुंजी/वैल्यू जोड़े के साथ एक निर्देश है। शेष प्रश्न यह है कि: मैं अपने निर्देश के माध्यम से डेटाफ्रेम में कैसे शामिल हो सकता हूं? – user1653205

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