2013-09-26 10 views
8

में दूसरे में एक ही डालने 1 मैं इस (DF1) की तरह DATE_TIME/वोल्टेज डेटा के साथ एक पांडा DataFrame है:, 2 अलग पांडा dataframes के 2 कॉलम की तुलना करें, तो अजगर

 Date_Time Chan 
0 20130401 9:00 AAT 
1 20130401 10:00 AAT 
2 20130401 11:00 AAT 
3 20130401 12:00 AAT 
4 20130401 13:00 AAT 
5 20130401 14:00 AAT 
6 20130401 15:00 AAT 

मैं के रूप में इस का उपयोग कर रहा एक बहुत बड़ी डेटा फ़ाइल से डेटा में लोड करने और एक डेटाफ्रेम बनाने के लिए एक प्रोटोटाइप। अन्य DataFrame इस (df2) की तरह दिखता है:

Chan   date_time Sens1 Sens2 
AAC 01-Apr-2013 09:00 5.17 1281 
AAC 01-Apr-2013 10:00 5.01 500 
AAC 01-Apr-2013 12:00 5.17 100 
AAC 01-Apr-2013 13:00 5.19 41997 
AAC 01-Apr-2013 16:00 5.21 2123 
AAT 01-Apr-2013 09:00 28.82 300 
AAT 01-Apr-2013 10:00 28.35 4900 
AAT 01-Apr-2013 12:00 28.04 250 
AAE 01-Apr-2013 11:00 3.36 400 
AAE 01-Apr-2013 12:00 3.41 200 
AAE 01-Apr-2013 13:00 3.40 2388 
AAE 01-Apr-2013 14:00 3.37 300 
AAE 01-Apr-2013 15:00 3.35 500 
AXN 01-Apr-2013 09:00 23.96 6643 
AXN 01-Apr-2013 10:00 24.03 1000 
AXW 01-Apr-2013 11:00 46.44 2343 

तो मुझे क्या करना चाहते हैं खोज DF1 के दोनों स्तंभ (अलग डेटा स्वरूप टिप्पण) से एक मैच की सभी आवृत्तियों के लिए df2 है और df2 से डेटा सम्मिलित डीएफ 1 में। इस तरह (DF1)

  Date_Time Chan Sens1 Sens2 
0 20130401 9:00 AAT 28.82 300 
1 20130401 10:00 AAT 28.35 4900 
2 20130401 11:00 AAT NaN NaN 
3 20130401 12:00 AAT 28.04 250 
4 20130401 13:00 AAT NaN NaN 
5 20130401 14:00 AAT NaN NaN 
6 20130401 15:00 AAT NaN NaN 

आप अजगर/पांडा कोड इस psuedocode मैच के लिए के लिए मुझे कुछ सुझाव दे सकता है:

if (df1['date_time'] = df2['date_time']) & (df1['Chan'] = df2['Chan'])): 
    df1['Sens1'] = df2['Sens1'] 
    df1['Sens2'] = df2['Sens2'] 

यदि यह जवाब प्रभाव है, यह bfill मेरा इरादा और ffill है NaNs और फिर इस डेटाफ्रेम को एक पैनल में जोड़ें और फिर एएटी के स्थान पर किसी अन्य चैनल नाम के साथ दोहराएं।

उत्तर

9

आप एक सादे ol 'का उपयोग कर सकते यह करने के लिए विलय। लेकिन पहले, आप आप DataFrames का एक छोटा सफाई करना चाहिए, सुनिश्चित करें कि आपके datetime कॉलम वास्तव में तार के बजाय datetimes कर रहे हैं बनाने के लिए (नोट: यह बेहतर हो सकता है ऐसा करने के लिए जब सीएसवी या जो कुछ भी रूप में पढ़ने):

df1['Date_Time'] = pd.to_datetime(df1['Date_Time'], format='%Y%m%d %H:%M') 
df2['date_time'] = pd.to_datetime(df2['date_time']) 

के भी एक ही नाम के साथ Datetime कॉलम का नाम बदलने करते हैं:

df1.rename(columns={'Date_Time': 'Datetime'}, inplace=True) 
df2.rename(columns={'date_time': 'Datetime'}, inplace=True) 

अब एक सरल मर्ज आप दे देंगे कि तुम क्या कर रहे हैं के बाद:

In [11]: df1.merge(df2) 
Out[11]: 
      Datetime Chan Sens1 Sens2 
0 2013-04-01 09:00:00 AAT 28.82 300 
1 2013-04-01 10:00:00 AAT 28.35 4900 
2 2013-04-01 12:00:00 AAT 28.04 250 

In [12]: df1.merge(df2, how='left') 
Out[12]: 
      Datetime Chan Sens1 Sens2 
0 2013-04-01 09:00:00 AAT 28.82 300 
1 2013-04-01 10:00:00 AAT 28.35 4900 
2 2013-04-01 11:00:00 AAT NaN NaN 
3 2013-04-01 12:00:00 AAT 28.04 250 
4 2013-04-01 13:00:00 AAT NaN NaN 
5 2013-04-01 14:00:00 AAT NaN NaN 
6 2013-04-01 15:00:00 AAT NaN NaN 
+0

मैं यह कैसे काम करेगा देख सकते हैं, लेकिन मैं एक हो रही है त्रुटि: "टाइप एरर: टू _datetime() को pd.to_datetime लाइन में एक अप्रत्याशित कीवर्ड तर्क 'प्रारूप' "मिला। क्या यह एक ऐसा फ़ंक्शन है जो पांडों के बाद के संस्करण में प्रारूप जोड़ा गया है। मेरे पास पांडा का संस्करण है जो पेजो के साथ बंडल किया गया था (जिसे मैंने 0.12 माना था)। – knight2270

+0

इस "पीडी .__ संस्करण__" के अनुसार मेरे पास संस्करण 0.10.1 है। मुझे इसे ठीक करने दें और इस समस्या पर वापस आएं, क्योंकि मैंने 10 और 12 के बीच प्रारूप परिवर्तनों के बारे में कुछ पढ़ा है। – knight2270

+0

ठीक है तो मैंने उच्च और निम्न को क्रमबद्ध किया है। मेरा मानना ​​है कि पोजो 2013 बी पैकेज बंडल पांडा 0.10.0 बंडल है। नवीनतम 0.12.0 है मैं प्रारूप विधि ', प्रारूप ='% Y% m% d% एच नहीं मिल सकता है:% एम '' [DATE_TIME '] लागू (लैम्ब्डा टी – knight2270

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