मेरे पास डेटाफ्रेम का निम्नलिखित अर्क है जो बास्केटबॉल मैच के खेल का प्रतिनिधित्व करता है:

    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
agm 14 सितंबर 2019, 01: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

उत्पादन

enter image description here

1
CypherX 14 सितंबर 2019, 03:12