Мы можем легко сделать это, используя groupby и count. Но мы должны помнить об использовании функции reset_index ().
df[['col1','col2','col3','col4']].groupby(['col1','col2']).count().\
reset_index()
bytes
не имеют собственного метода __format__
, поэтому используется значение по умолчанию от object
:
>>> bytes.__format__ is object.__format__
True
>>> '{:20}'.format(object())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
Это просто означает, что вы не можете использовать ничего, кроме прямого up, неформатированное неравномерное форматирование на них. Явно конвертируем в строковый объект (как вы это делали, расшифровывая bytes
до str
), чтобы получить поддержку спецификации формата .
Вы можете сделать преобразование явным с помощью кнопки !s
:
>>> '{!s:20s}'.format(b"Hi")
"b'Hi' "
>>> '{!s:20s}'.format(object())
'<object object at 0x1100b9080>'
object.__format__
явно отклоняет форматированные строки, чтобы избежать неявных преобразований строк, особенно потому, что инструкции форматирования специфичны по типу.
Это также происходит при попытке форматирования None
:
>>> '{:.0f}'.format(None)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: non-empty format string passed to object.__format__
Это заняло некоторое время для разработки (в моем случае, когда None
возвращалась переменной экземпляра)!