मेरे पास डेटाफ्रेम का निम्नलिखित अर्क है जो बास्केटबॉल मैच के खेल का प्रतिनिधित्व करता है:
import pandas as pd
data = {'actionNumber':
[669,668,667,666,665,663,662,661,660,659,657,656,655], 'gt':['03:12','03:12','03:18','03:18','03:36','03:48','03:48','03:48','03:48','03:51','03:51','03:55','03:58'], 'actionType':['steal','turnover','assist','3pt','2pt','freethrow','freethrow','foulon','foul','steal','turnover','rebound','2pt'], 'player':['S. WOHLWEND','F. DELLA MEA','Z. RIAUKA','A. VIOTTI','J. VIANA','A. VIOTTI','A. VIOTTI','A. VIOTTI','E. GONZALEZ','A. VIOTTI','A. ARISTIMUNO','P. BLACKWELL','A. VIOTTI'], 'tno':['1', '2','1','1','2','1','1','1','2','1','2','2','1']}
df = pd.DataFrame(data)
df
मैं उस समय को निर्धारित करना चाहता हूं जब प्रत्येक टीम का कब्जा हो। टीएनओ कॉलम में आप मूल रूप से देख सकते हैं कि किस टीम के पास कब्जा है, इसलिए मेरा उद्देश्य अंतिम पंक्ति से शुरू होने वाले पंडों पर पुनरावृति करना है, और इसे एक के रूप में चिह्नित करना है, उसके बाद अगले पर जाकर उन सभी पंक्तियों को चिह्नित करें जहां टीएनओ है ए २ को पोज़िशन २ के रूप में, उसके बाद, जब tno १ में बदल जाता है, तो इसे पोज़िशन ३ के रूप में चिह्नित करें, और जब तक मैं सभी अलग-अलग पोज़िशन को गिनता और चिह्नित नहीं करता तब तक क्रिया को दोहराएं; इसलिए अंत में मैं प्रति तिमाही, प्रति टीम प्रत्येक स्थिति का मतलब प्राप्त कर सकता हूं, यह देखने के लिए कि किस टीम के पास तेज स्थिति है, आदि।
मैंने पहले से ही लूप के साथ प्रयास किया है और मैं इसे इस तरह से कर सकता हूं लेकिन मैं पांडा सीखने की कोशिश कर रहा हूं और हर हिस्से में मैं देखता हूं कि लूप से बचा जाना चाहिए, मैंने पाली का उपयोग करके सफलता के समान भागों को किया है, लेकिन मैं नहीं जानें कि शिफ्ट का उपयोग कैसे किया जाता है, यह जाने बिना कि यह प्रत्येक स्थिति में कितने नाटकों तक चलने वाला है।
मैं निम्नलिखित की उम्मीद कर रहा हूँ:
data = {'actionNumber':
[669,668,667,666,665,663,662,661,660,659,657,656,655], 'gt':['03:12','03:12','03:18','03:18','03:36','03:48','03:48','03:48','03:48','03:51','03:51','03:55','03:58'], 'actionType':['steal','turnover','assist','3pt','2pt','freethrow','freethrow','foulon','foul','steal','turnover','rebound','2pt'], 'player':['S. WOHLWEND','F. DELLA MEA','Z. RIAUKA','A. VIOTTI','J. VIANA','A. VIOTTI','A. VIOTTI','A. VIOTTI','E. GONZALEZ','A. VIOTTI','A. ARISTIMUNO','P. BLACKWELL','A. VIOTTI'], 'tno':['1','2','1','1','2','1','1','1','2','1','2','2','1'],'pn': ['7','6','5','5','4','3','3','3','','3','2','2','1']}
df = pd.DataFrame(data)
df
जहां पीएन कब्जा संख्या है (पंक्ति 57 बी को अनदेखा करें यह इस समस्या के लिए महत्वपूर्ण नहीं है), इसलिए मैं प्रत्येक स्थिति के अंतिम को प्राप्त कर सकता हूं, यह कैसे समाप्त हुआ, आदि।
1 उत्तर
यहाँ चरणों को तोड़ने का एक और प्रयास है।
df = df.sort_values('actionNumber', ascending=True)
tno = df.tno.to_list()
# check if fouls happened
isfoul = (df.actionType=='foul').astype(int).to_list()
tnox = [int(x)-int(y) for x,y in zip(tno,isfoul)]
# calculate when a swap happens
swap_counter = [1] + [np.abs(int(x) - int(y)) for x, y in zip(tnox[:-1], tnox[1:])]
# evaluate a cumulative sum of all swaps
df['pn'] = np.array(swap_counter).cumsum()*np.abs(1-np.array(isfoul))
# adjust column pn: (where rows with actionType='foul') leave cell value empty
df.pn.loc[df.actionType=='foul'] = ''
df = df.sort_values('actionNumber', ascending=False)
df
उत्पादन
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।