У меня есть DataFrame, построенный из запроса к базе данных. Каждая строка во фрейме имеет идентификатор базы данных, дату, задание, логическое значение проблем и фиксированное логическое значение. Например:
data = [
{'id': 1, 'date': '2020-02-01', 'job': 'ABC', 'issue': True, 'fixed': False},
{'id': 2, 'date': '2020-02-01', 'job': 'ABC', 'issue': False, 'fixed': False},
{'id': 3, 'date': '2020-02-01', 'job': 'ABC', 'issue': True, 'fixed': True},
{'id': 4, 'date': '2020-02-01', 'job': 'DEF', 'issue': True, 'fixed': True}
]
data_df = pd.DataFrame(data)
Я хочу сделать groupby
и agg
, где я группируюсь по работе и дате, и получаю количество «проблем» и «исправленных», которые являются Истиной. Что-то вроде:
result_data = [
{'date': '2020-02-01', 'job': 'ABC', 'issue': 2, 'fixed': 1},
{'date': '2020-02-01', 'job': 'DEF', 'issue': 1, 'fixed': 1}
]
result_df = pd.DataFrame(result_data)
Код будет выглядеть примерно так:
result_df = data_df.groupby(['date', 'job']).agg({'issue': 'sum-true', 'fixed': 'sum-true'})
, но я не уверен, каким должен быть 'sum-true'
. Нет, я не могу просто отфильтровать весь DF по столбцу, являющемуся истинным, и суммировать, так как issue
может быть True
, тогда как fixed
равно False
.