Как перебрать DataFrame Groupby после применения size ()? - PullRequest
0 голосов
/ 03 июля 2019

Прочесывая файлы журналов, я строю фрейм данных о неудачном процессе, дате и машине.Моя цель - предоставить гистограмму для каждого процесса, где даты являются осью X, а число сбоев каждый день вычисляется с помощью .size ().

grouped = fail_df.groupby(['Process', 'Date']).size
print(fail_df.groupby(['Process', 'Date']).size())

показывает именно то, что я хочу.Первые строки печати:

Process          Date
10HzTail         2019-06-16     1
1553Prox         2019-06-16     3
                 2019-06-17     8
                 2019-06-18    10
                 2019-06-19     2
                 2019-06-20     5
Cthread2         2019-06-18     1
                 2019-06-20     1

Я пытаюсь повторить как

for name, row in grouped:
    print(name)
    print(row)

Дает эту ошибку вывода

dtype: int64
Traceback (most recent call last):
  File "./allpandas", line 140, in <module>
main()
 File "./allpandas", line 125, in main
  for name, row in grouped:
TypeError: 'int' object is not iterable

Я хотел бы обработать каждый процесс вочередь.Я хочу, чтобы на столбчатую диаграмму этого процесса были поданы даты и число.

Есть ли способ повторить это или я допустил фундаментальную ошибку в своей группировке?

ОБНОВЛЕНИЕ

Я попробовал предложенный размер () и все еще получаю ту же ошибку.

grouped = fail_df.groupby(['Process', 'Date']).size()
for name, row in grouped:
    print(name)
    print(row)

Есть ли другие предложения?

1 Ответ

0 голосов
/ 04 июля 2019

Самое быстрое решение, если вы используете matplotlib

Используете ли вы matplotlib?
Если это так, если я понял, что вы хотите, вам не нужно зацикливаться, вы можете использовать pandas.DataFrame.plot , который сделает всю работу за вас.

grouped = fail_df.groupby(['Process', 'Date']).size()
axis = grouped.plot(kind='bar')
plt.show()

Где plt - это обычный import matplotlib.pyplot as plt.

Возможно, вам понадобится зафиксировать метку внизу каждой полосы, если они слишком велики.

Ваша ошибка

Ваша ошибка происходит из-за того, что grouped является Series, а не DataFrame, поэтому вы не можете перебирать его таким образом. Итерация по серии возвращает только значение. Вы должны сделать:

for value in grouped:
    print(value)

чтобы увидеть размеры, но вы потеряете метку индекса. Чтобы получить также метку индекса, решение:

for name, row in zip(grouped.index, grouped):
    print(name)
    print(row)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...