Как получить количество экземпляров в объекте itertools._grouper?
Предположим, у меня есть следующий кадр данных:
>>>from itertools import groupby
>>>import pandas as pd
>>>idx1 = pd.date_range('2019-01-01',periods=5)
>>>idx2 = pd.date_range('2020-06-01',periods=5)
>>>idx3 = pd.date_range('2021-08-15',periods=5)
>>>idx4 = pd.date_range('2022-03-20',periods=5)
>>>idx = idx1.union(idx2).union(idx3).union(idx4)
>>>l = [1,-1,-4,2,-3,4,5,1,-3,-4,-5,-3,-4,2,3,-1,-2,3,2,3]
>>>df = pd.DataFrame(l, index=idx, columns=['a'])
>>>df
a
2019-01-01 1
2019-01-02 -1
2019-01-03 -4
2019-01-04 2
2019-01-05 -3
2020-06-01 4
2020-06-02 5
2020-06-03 1
2020-06-04 -3
2020-06-05 -4
2021-08-15 -5
2021-08-16 -3
2021-08-17 -4
2021-08-18 2
2021-08-19 3
2022-03-20 -1
2022-03-21 -2
2022-03-22 3
2022-03-23 2
2022-03-24 3
>>>for k,g in groupby(df['a'], lambda x: x<0):
print(k, sum(g))
False 1
True -5
False 2
True -3
False 10
True -19
False 5
True -3
False 8
Как я могу получить количество экземпляров в каждой группе? Я попытался применитьlen()
встроенный, но получил следующую ошибку:
>>>for k,g in groupby(df['a'], lambda x: x<0):
print(k,len(g))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [241], in <cell line: 1>()
1 for k,g in groupby(df['a'], lambda x: x<0):
----> 2 print(k,len(g))
TypeError: object of type 'itertools._grouper' has no len()
1 ответ
Все еще не уверен, почемуlen
не работает, ноsum
делает. Тем не менее, приведенное ниже дает желаемый результат.
>>>[len(list(g)) for k,g in groupby(df['a'], lambda x: x<0) if k]
[2,1,5,2]