2015-12-09 2 views
1

Я пытаюсь создать гистограмму, основанную на следующих GroupBy,создание гистограмм в панд

dfm.groupby(['ID', 'Readings', 'Condition']).size: 
578871001 20110603   True 1 
      20110701   True 1 
      20110803   True 1 
      20110901   True 1 
      20110930   True 1 
              .. 
324461897 20130214   False   1 
      20130318   False   1 
      20130416   False   1 
      20130516   False   1 
      20130617   False   1 
532674350 20110616   False   1 
      20110718   False   1 
      20110818   False   1 
      20110916   False   1 
      20111017   False   1 
      20111115   False   1 
      20111219   False   1 

Однако я пытаюсь форматировать вывод по Condition и группе количество ID и Readings. Нечто подобное,

True 
# of Readings: # of ID 
    1 : 5 
    2 : 8 
    3 : 15 
    4 : 10 
    5 : 4 

Я пытался группируя просто ID и чтения, и преобразующей по условию, но не получили очень далеко.

Edit:

Это то, что dataframe выглядел до GroupBy:

  CustID  Condtion  Month   Reading Consumption 
0  108000601   True  June   20110606  28320.0 
1  108007000   True  July   20110705  13760.0 
2  108007000   True  August   20110804  16240.0 
3  108008000   True September   20110901  12560.0 
4  108008000   True October   20111004  12400.0 
5  108000601  False November   20111101  9440.0 
6  108090000  False December   20111205  12160.0 
+0

могли бы вы прикрепить свой 'dfm' dataframe до группировки? –

ответ

1

Это то, что вы пытаетесь достичь с помощью groupby? Я включил Counter, чтобы отслеживать количество каждого показания. Например, для Condtion = False, есть два CustIDs с одним чтением, так что выход первого ряда является:

Condtion 
False 1 2 # One reading, two observations of one reading. 

Тогда для Condtion = True, есть один клиент с одним чтением (108000601) и два клиента с двумя показаниями каждый. Выход для этой группы:

Condtion 
True 1 1 # One customer with one reading. 
     2 2 # Two customers with two readings each. 


from collections import Counter 

gb = df.groupby(['Condtion', 'CustID'], as_index=False).Reading.count() 
>>> gb 
    Condtion  CustID Reading 
0 False 108000601  1 
1 False 108090000  1 
2  True 108000601  1 
3  True 108007000  2 
4  True 108008000  2 

>>> gb.groupby('Condtion').Reading.apply(lambda group: Counter(group)) 

Condtion 
False  1 2 
True  1 1 
      2 2 
dtype: float64 

Или, прикованный вместе как одно утверждение:

gb = (df 
     .groupby(['Condtion', 'CustID'], as_index=False)['Reading'] 
     .count() 
     .groupby('Condtion')['Reading'] 
     .apply(lambda group: Counter(group)) 
) 
+0

Не совсем. Это должно быть количество показаний и количество идентификаторов, которые имели одинаковое количество показаний на основе условия. – dashvvv

+0

ОК. Но ваши данные образца имеют только один CustID. Текущая таблица содержит количество показаний для CustID, поэтому вы хотите получить подсчет этих значений по условию? – Alexander

+0

oops. Я установил данные образца. – dashvvv

Смежные вопросы