У меня есть датафрейм в пандах.
test_df = pd.DataFrame({'date': ['2018-12-28', '2018-12-28', '2018-12-29', '2018-12-29', '2018-12-30', '2018-12-30'],
'transaction': ['aa', 'bb', 'cc', 'aa', 'bb', 'bb'],
'ccy': ['USD', 'EUR', 'EUR', 'USD', 'USD', 'USD'],
'amt': np.random.random(6)})
test_df:
date transaction ccy amt
2018-12-28 aa USD 0.323439
2018-12-28 bb EUR 0.048948
2018-12-29 cc EUR 0.793263
2018-12-29 aa USD 0.013865
2018-12-30 bb USD 0.658571
2018-12-30 bb USD 0.224951
Следующий код дает мне этот вывод.
grouper = test_df.groupby([pd.Grouper('date'), 'transaction', 'ccy'])
grp_transactions = grouper['amt'].sum().unstack()
output:
ccy EUR USD
date transaction
2018-12-28 aa NaN 0.323439
bb 0.048948 NaN
2018-12-29 aa NaN 0.013865
cc 0.793263 NaN
2018-12-30 bb NaN 0.883523
Я полагаю, что это ожидается, так как функция groupby будет группировать значения в столбцах на основе приведенного выше порядка, суммировать соответственно и не создавать новые строки длятранзакции, которых нет в DF.
Есть ли в пандах способ включить значения NaN, если транзакция не выполняется в определенный день при использовании groupby?то есть.Выходные данные должны быть равны NaN для обоих ccy, если мой DF не имеет транзакции: cc 28/12/2018.
Ожидаемый результат:
ccy EUR USD
date transaction
2018-12-28 aa NaN 0.323439
bb 0.048948 NaN
cc NaN NaN
2018-12-29 aa NaN 0.013865
bb NaN NaN
cc 0.793263 NaN
2018-12-30 aa NaN NaN
bb NaN 0.883523
cc NaN NaN
Любая помощь приветствуется.Спасибо!