2017-01-21 7 views
7

को देखते हुए मैं निम्नलिखित दो वैक्टर है:अजगर पांडा: कैसे की गणना करने के व्युत्पन्न/ढाल

In [99]: time_index 
Out[99]: 
[1484942413, 
1484942712, 
1484943012, 
1484943312, 
1484943612, 
1484943912, 
1484944212, 
1484944511, 
1484944811, 
1484945110] 

In [100]: bytes_in 
Out[100]: 
[1293981210388, 
1293981379944, 
1293981549960, 
1293981720866, 
1293981890968, 
1293982062261, 
1293982227492, 
1293982391244, 
1293982556526, 
1293982722320] 

कहाँ bytes_in केवल काउंटर एक वृद्धिशील है, और time_index युग यूनिक्स टाइमस्टैम्प करने के लिए एक सूची (है)।

उद्देश्य: मैं गणना करना चाहता हूं बिटरेट है।

इसका मतलब है कि मैं की तरह एक डेटा फ्रेम का निर्माण करेगा

In [101]: timeline = pandas.to_datetime(time_index, unit="s") 

In [102]: recv = pandas.Series(bytes_in, timeline).resample("300S").mean().ffill().apply(lambda i: i*8) 

In [103]: recv 
Out[103]: 
2017-01-20 20:00:00 10351849683104 
2017-01-20 20:05:00 10351851039552 
2017-01-20 20:10:00 10351852399680 
2017-01-20 20:15:00 10351853766928 
2017-01-20 20:20:00 10351855127744 
2017-01-20 20:25:00 10351856498088 
2017-01-20 20:30:00 10351857819936 
2017-01-20 20:35:00 10351859129952 
2017-01-20 20:40:00 10351860452208 
2017-01-20 20:45:00 10351861778560 
Freq: 300S, dtype: int64 

प्रश्न: अब, क्या अजीब बात है, ढाल मैन्युअल की गणना मुझे देता है:

In [104]: (bytes_in[1]-bytes_in[0])*8/300 
Out[104]: 4521.493333333333 

जो सही मान है ..

पांडा के साथ ढाल की गणना करते समय मुझे

In [124]: recv.diff() 
Out[124]: 
2017-01-20 20:00:00   NaN 
2017-01-20 20:05:00 1356448.0 
2017-01-20 20:10:00 1360128.0 
2017-01-20 20:15:00 1367248.0 
2017-01-20 20:20:00 1360816.0 
2017-01-20 20:25:00 1370344.0 
2017-01-20 20:30:00 1321848.0 
2017-01-20 20:35:00 1310016.0 
2017-01-20 20:40:00 1322256.0 
2017-01-20 20:45:00 1326352.0 
Freq: 300S, dtype: float64 

जो ऊपर के रूप में ही नहीं है, १३५६४४८.० आप मैं गलत क्या कर रहा हूँ पर प्रबुद्ध कृपया सकते हैं की तुलना में 4521,493333333333

अलग है?

+0

कोशिश 'recv.diff()' जो समारोह के एक कॉल जहां '' recv.diff' diff' विधि ;-) – MaxU

+0

@MaxU धन्यवाद करने के लिए एक संदर्भ है :) आप एक बिंदु है है! हालांकि अभी भी अलग-अलग परिणाम देख रहे हैं। मैंने मूल परिणाम को नए नतीजे से संपादित किया। – iamsterdam

+1

आप मुझे लगता है कि अतिरिक्त कदम भूल रहे हैं - 'recv.diff()। Mul (8) .div (300)' –

उत्तर

8

pd.Series.diff() केवल अंतर लेता है। यह इंडेक्स के डेल्टा द्वारा भी विभाजित नहीं होता है।

यह आपको जवाब

recv.diff()/recv.index.to_series().diff().dt.total_seconds() 

2017-01-20 20:00:00   NaN 
2017-01-20 20:05:00 4521.493333 
2017-01-20 20:10:00 4533.760000 
2017-01-20 20:15:00 4557.493333 
2017-01-20 20:20:00 4536.053333 
2017-01-20 20:25:00 4567.813333 
2017-01-20 20:30:00 4406.160000 
2017-01-20 20:35:00 4366.720000 
2017-01-20 20:40:00 4407.520000 
2017-01-20 20:45:00 4421.173333 
Freq: 300S, dtype: float64 

तुम भी bytes_in और डेल्टा आपके पास करने के लिए उम्मीद गुजर numpy.gradient इस्तेमाल कर सकते हैं हो जाता है। किनारों के बारे में धारणा बनाने के बजाय, यह लंबाई को कम नहीं करेगा।

np.gradient(bytes_in, 300) * 8 

array([ 4521.49333333, 4527.62666667, 4545.62666667, 4546.77333333, 
     4551.93333333, 4486.98666667, 4386.44  , 4387.12  , 
     4414.34666667, 4421.17333333]) 
संबंधित मुद्दे