मेरे पास एक डेटा फ्रेम है जिसमें तीन कॉलम हैं उदा। आदेश, समय और स्थिति। प्रत्येक आदेश में कई स्थितियां हो सकती हैं उदा। नया, भरा हुआ, आंशिक, रद्द किया हुआ। इसलिए ऑर्डर आईडी 123 नए से रद्द आदि आदि में जा सकता है या इसके तहत 10 बार नया हो सकता है।

मेरा सवाल यह है कि मैंने ऑर्डर आईडी और समय के आधार पर एक समूह किया है, मैं प्रत्येक ऑर्डर स्थिति पैटर्न की गिनती कैसे प्राप्त कर सकता हूं? जैसे कितनी बार New, Filled दिखाई देता है? नई, नई, रद्द कितनी बार दिखाई देती है?

मैंने नीचे की कोशिश की, लेकिन मुझे नहीं पता कि मैं जो परिणाम चाहता हूं उसे कैसे प्राप्त कर सकता हूं।

sortedOrders=OrdersAll.sort_values(['ordid','timestamp'], ascending=[True, True])
sortedOrdersAll.groupby(['ordid','ostatus']).count()

enter image description here

0
Maths12 12 मई 2019, 20:44

1 उत्तर

सबसे बढ़िया उत्तर

मैंने एक डमी डेटाफ्रेम df. नीचे आप स्थिति पैटर्न के लिए गणना प्राप्त करने के लिए तर्क का उल्लेख कर सकते हैं।

In [109]: status = 'new,filled,partial,cancelled'.split(',')
In [102]: df = pd.DataFrame( [ [ random.randint(1,25),  random.randint(100, 200), status[random.randint(0,3)] ] for _ in range(50) ], columns=['order_id','timestamp' ,'status'])

In [103]: df.head(10)
Out[103]:
   order_id  timestamp     status
0        20        120        new
1         9        118  cancelled
2        16        125    partial
3         9        124  cancelled
4         2        190     filled
5         3        185    partial
6         5        162     filled
7        21        101        new
8        25        115     filled
9        14        141     filled

In [104]: df_grouped = df.groupby('order_id', as_index=False)

In [105]: def status_transition_with_timestamp(each_grouped_df):
     ...:     sorted_df = each_grouped_df.sort_values('timestamp', ascending=True)
     ...:     concatenated_transition = ','.join(sorted_df['status'])
     ...:     return concatenated_transition
     ...:

In [106]: result = df_grouped['status'].agg(status_transition_with_timestamp)

In [107]: result.head(10)
Out[107]:
   order_id                       status
0         1                       filled
1         2             filled,cancelled
2         3    partial,cancelled,partial
3         4         filled,new,cancelled
4         5             filled,cancelled
5         6                          new
6         7                       filled
7         9  partial,cancelled,cancelled
8        10                cancelled,new
9        11                  new,partial

In [108]: result.groupby('status').count()
Out[108]:
                                           order_id
status
cancelled,new                                     1
filled                                            4
filled,cancelled                                  2
filled,new,cancelled                              1
filled,partial,partial                            1
new                                               2
new,cancelled                                     2
new,filled                                        1
new,new,filled                                    1
new,new,new,partial,partial,cancelled,new         1
new,partial                                       1
partial                                           1
partial,cancelled,cancelled                       1
partial,cancelled,partial                         1
partial,partial                                   1
partial,partial,new,partial,new                   1

1
yardstick17 12 मई 2019, 22:26