मुझे अपने डेटासेट के साथ एक समस्या है, जहां मैं सीजन के आखिरी दिन को चिह्नित करना चाहता हूं (छूट, छूट नहीं) और मैं बिल्कुल विचारों के बिना हूं। अंकन एक नया चर होना चाहिए (मान - अंतिम दिन, मानक दिन)

data = {
    'start_day': [
        '2008-01-01',
        '2008-01-02',
        '2008-01-03',
        '2008-01-04', 
        '2008-01-05'
    ],
    'start_day_no': [
        1,
        2, 
        3,
        4, 
        5
    ],
    'Season': [
        'Discount',
        'Discount', 
        'No_discount', 
        'No_discount', 
        'Discount'
    ],        
}
frame = pd.DataFrame(data)

इसलिए यदि मैं अपने पूर्ण डेटासेट को देखता हूं, तो मैं छूट के मौसम के अंतिम दिन (नीला) और मानक मूल्य (लाल) के अंतिम दिन को चिह्नित करना चाहता हूं, हालांकि इस शर्त के साथ कि सीजन कम से कम 20 दिनों तक चलता है (इसलिए लाल शुरुआत 2016 का मौसम के रूप में नहीं गिना जाता है)।

enter image description here

कोई संकेत, कृपया? शुक्रिया!!!!

2
Lukáš Tůma 27 नवम्बर 2019, 16:13

1 उत्तर

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

आप इसे इस तरह के चरणों में कर सकते हैं:

साल के नकली डेटा पर बनाना:

df = pd.DataFrame({'Season':['No_discount']*16+
                            ['Discount']*90+
                            ['No_discount']*202+
                            ['Discount']*25+
                            ['No_discount']*33}, 
                  index=pd.date_range('2016-01-01','2016-12-31', freq='D'))

df['grp'] = (df['Season'] != df['Season'].shift()).cumsum()

df['grp_size'] = df.groupby('grp').transform('count')

df.groupby('grp').tail(1).query('grp_size >= 20') #Filtering groups smaller than 20

आउटपुट:

                 Season  grp  grp_size
2016-04-15     Discount    2        90
2016-11-03  No_discount    3       202
2016-11-28     Discount    4        25
2016-12-31  No_discount    5        33

जहां डेटाफ्रेम की अनुक्रमणिका प्रत्येक समूह की अंतिम तिथियां होती हैं।

df_out = df.groupby('grp').tail(1).query('grp_size >= 20')
df_out.index.strftime('%Y-%m-%d').tolist()

आउटपुट:

['2016-04-15', '2016-11-03', '2016-11-28', '2016-12-31']
1
Scott Boston 27 नवम्बर 2019, 16:31