मेरे पास निम्न डेटाफ़्रेम है:

    True_False
2018-01-02  True
2018-01-03  True
2018-01-04  False
2018-01-05  False
2018-01-08  False
... ...
2020-01-20  True
2020-01-21  True
2020-01-22  True
2020-01-23  True
2020-01-24  False
504 rows × 1 columns

मैं जानना चाहता हूं कि कितने लगातार True या False लेकिन कुल नहीं, इसे True या False टॉगल करने के बाद गिनना बंद कर देना चाहिए। जैसे कि मैं अंततः mean(), max() और min() दिनों की गणना करना चाहता हूं। क्या यह डेटा पंडों में दिखाना संभव है?

1
Slartibartfast 26 जिंदा 2020, 12:37

1 उत्तर

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

समाधान यदि सभी डेटाटाइम लगातार हैं:

आप Series.shift और Series.cumsum, फिर GroupBy.size:

g = df['True_False'].ne(df['True_False'].shift()).cumsum()
s = df.groupby(['True_False',g]).size()
print (s)
True_False  True_False
False       2             3
            4             1
True        1             2
            3             4
dtype: int64

और अंतिम समुच्चय min, max और mean प्रति प्रथम स्तर MultiIndex:

print (s.groupby(level=0).agg(['mean','max','min']))
            mean  max  min
True_False                
False          2    3    1
True           3    4    2

अगर डेटाटाइम्स लगातार नहीं हैं तो पहला कदम है DataFrame.asfreq:

df = df.asfreq('d')
g = df['True_False'].ne(df['True_False'].shift()).cumsum()
s = df.groupby(['True_False',g]).size()
print (s.groupby(level=0).agg(['mean','max','min']))
                mean  max  min
True_False                    
False       1.333333    2    1
True        3.000000    4    2
1
jezrael 26 जिंदा 2020, 12:59