2014-05-14 10 views
17

सबसे पहले मैं पांडा के लिए नया हूं, लेकिन मैं पहले से ही इसमें प्यार कर रहा हूं। मैं ओरेकल से लैग फ़ंक्शन के समतुल्य को कार्यान्वित करने की कोशिश कर रहा हूं।ओरेकल लीड/लैग फ़ंक्शन के बराबर पांडस

की आप इस DataFrame है लगता है:

Date     Group  Data 
2014-05-14 09:10:00  A   1 
2014-05-14 09:20:00  A   2 
2014-05-14 09:30:00  A   3 
2014-05-14 09:40:00  A   4 
2014-05-14 09:50:00  A   5 
2014-05-14 10:00:00  B   1 
2014-05-14 10:10:00  B   2 
2014-05-14 10:20:00  B   3 
2014-05-14 10:30:00  B   4 

यह एक Oracle डाटाबेस था और मैं एक अंतराल समारोह "समूह" स्तंभ के आधार पर वर्गीकृत बनाना चाहता था और दिनांक मैं आसानी से इस समारोह का उपयोग कर सकते द्वारा आदेश दिया हैं :

LAG(Data,1,NULL) OVER (PARTITION BY Group ORDER BY Date ASC) AS Data_lagged 

यह निम्न तालिका में परिणाम होगा:

Date     Group  Data Data lagged 
2014-05-14 09:10:00  A  1   Null 
2014-05-14 09:20:00  A  2   1 
2014-05-14 09:30:00  A  3   2 
2014-05-14 09:40:00  A  4   3 
2014-05-14 09:50:00  A  5   4 
2014-05-14 10:00:00  B  1   Null 
2014-05-14 10:10:00  B  2   1 
2014-05-14 10:20:00  B  3   2 
2014-05-14 10:30:00  B  4   3 

पांडा में मैं तिथि निर्धारित एक सूचकांक होने के लिए और पारी विधि का उपयोग कर सकते हैं:

db["Data_lagged"] = db.Data.shift(1) 

केवल मुद्दा यह है कि यह एक कॉलम के आधार पर समूह नहीं करता है। यहां तक ​​कि अगर मैं इंडेक्स के रूप में दो कॉलम दिनांक और समूह सेट करता हूं, तो भी मुझे लगी कॉलम में "5" मिल जाएगा।

क्या पांडस में लीड और अंतराल कार्यों के बराबर लागू करने का कोई तरीका है?

उत्तर

29

आप प्रदर्शन कर सकता है एक groupby/apply (shift) operation:

In [15]: df['Data_lagged'] = df.groupby(['Group'])['Data'].shift(1) 

In [16]: df 
Out[16]: 
       Date Group Data Data_lagged 
2014-05-14 09:10:00  A  1   NaN 
2014-05-14 09:20:00  A  2   1 
2014-05-14 09:30:00  A  3   2 
2014-05-14 09:40:00  A  4   3 
2014-05-14 09:50:00  A  5   4 
2014-05-14 10:00:00  B  1   NaN 
2014-05-14 10:10:00  B  2   1 
2014-05-14 10:20:00  B  3   2 
2014-05-14 10:30:00  B  4   3 

[9 rows x 4 columns] 
+0

आपको बहुत बहुत धन्यवाद !! मुझे ठीक इसी की आवश्यकता थी। – gcarmiol

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