मैं एक बहुत ही सरल सेटअपस्पीड अप कस्टम एकत्रीकरण कार्यों
index period ask bid
00:00:00.126 42125 112.118 112.117
00:00:00.228 42125 112.120 112.117
00:00:00.329 42125 112.121 112.120
00:00:00.380 42125 112.123 112.120
00:00:00.432 42125 112.124 112.121
00:00:00.535 41126 112.124 112.121
00:00:00.586 41126 112.122 112.121
00:00:00.687 41126 112.124 112.121
00:00:01.198 41126 112.124 112.120
00:00:01.737 41126 112.124 112.121
00:00:02.243 41126 112.123 112.121
अब मैं कुल अवधि
g=df.groupby('period')
को pandas.groupy का उपयोग
अवधि के अनुसार न्यूनतम और अधिकतम कीमतें प्राप्त करना आसान है, उदाहरण के लिए
import numpy as np
res=g.agg({'ask': [np.amax, np.amin]})
यह भी काफी तेज़ है। अब, मैं प्रति अवधि पहले और अंतिम मूल्य भी चाहता हूं। यह वह जगह है जहां मुसीबत शुरू होती है। बेशक, मैं कर सकते हैं:
res=g.agg({'ask': lambda x: x[0]})
और यह काम करता है, मूल रूप से, लेकिन यह बड़े डेटा सेट के लिए बहुत धीमी है। असल में, एक पायथन फ़ंक्शन कॉल के लिए कॉल ओवरहेड बस विशाल है।
क्या किसी को np.amax के समान एक numpy फ़ंक्शन के बारे में पता है जो समूह के पहले या अंतिम तत्व को वापस कर देगा? मुझे एक नहीं मिला। iloc [0] चाल नहीं करता है क्योंकि यह किसी ऑब्जेक्ट की विधि है और इसलिए, मैं इसे g.agg पर फ़ंक्शन के रूप में पास नहीं कर सकता, क्योंकि मेरे पास इस चरण में ऑब्जेक्ट नहीं है (यही वह है जो लैम्ब्डा के लिए जरूरी है)।
अब, मैं आलसी नहीं हूं, और मैंने साइथन का उपयोग करके अपने लिए ऐसा करने की कोशिश की।
import numpy as np
cimport numpy as np
cpdef double first(np.ndarray array_series):
return array_series[0]
लेकिन पांडा एक एकत्रीकरण समारोह के रूप में यह स्वीकार नहीं करेंगे क्योंकि यह एक np.ndarray के बजाय एक pd.core.series-वस्तु से गुजरता है। (किसी को दूसरे से नहीं निकलता है, संकलक इसे पहचान नहीं पाता है।)
क्या कोई जानता है कि साइथन फ़ंक्शन कैसे लिखना है जो पाइथन कॉल ओवरहेड के बिना एक पांडा श्रृंखला स्वीकार करता है?
आप 'कोशिश की df.groupby ('अवधि') है पहला है।() 'और' df.groupby ('अवधि')। अंतिम() '? – EdChum
धन्यवाद, यह एक अच्छा संकेत है। यह काम करता है, लेकिन मैं पहले() - फ़ंक्शन को g.agg (...) में पास नहीं कर सकता, क्या मैं कर सकता हूं? मैं इसे बेहतर पसंद करूंगा, क्योंकि मैं एक बार में कई अलग-अलग एकत्रीकरण कार्यों को लागू करना चाहता हूं (अमीन, अमेक्स, पहले, ...)। यह इसका उपयोग करने के लिए एक कामकाज होगा और फिर मुझे लगता है कि मेरे अंतिम डेटासेट को मैन्युअल रूप से इकट्ठा करें। – user5507059
हाँ आप कर सकते हैं, कृपया मेरा उत्तर – EdChum