Написал код:
array = pd.DataFrame(np.object, index=[], columns=[])
array = array.append({'Project': b.name, 'Summary': card.name, \
'Key': card.id, 'Assignee': m, 'Points': s}, \
ignore_index=True)
array1 = pd.read_excel('ProjectCostUCP.xlsx', 'Лист1')
result = array[['Project', 'Assignee', 'Points']].groupby(['Project',
'Assignee']).sum(axis=1)
print(result.columns.tolist())
result = result.merge(array1, on=['Project'])
result['Value'] = result.Points * result.Price
writer = pd.ExcelWriter('third.xlsx')
array.to_excel(writer, "June")
result.to_excel(writer, "June_agregation")
writer.save()
Нужно обьединить две таблицы - result и array1 по наименованию колонки - 'Project'. Но, как показывает строчка print(result.columns.tolist()) в таблице result только одна колонка - 'Points'. Хотя до операции groupby() была еще и колонка 'Project'. groupby() поместил 'Project' в какой-то MultiIndex, с которого я не могу вытянуть данные.
Помогите, пожалуйста, как исправить код, чтобы он заработал ?
Конечным результатом работы кода, должна быть таблица:
Project Assignee Price Points Value
srnd-demo Serhii 5,5 23 126,5
а после выполнения строчки
result = array[['Project', 'Assignee','Points']].groupby(['Project',
'Assignee']).sum(axis=1)
получается таблица:
Points
Project Assignee
srnd-demo Serhii 23
Points - оказались наименованием Columns, а Project Assignee попали в тип MultiIndex, с которым не возможно работать (а именно вытягивать с него данные)
таблица array1 имеет вид:
Project Price
srnd-demo 5.5
где Project Price - это название columns.
Нужно обьединить таблицы result и array1 по названию columns Project, после чего перемножить Price на Points и поместить значение в колонку Value.
Использование
result.reset_index().merge(array1)
привело к созданию таблицы:
Project Assignee Price_x Points Price_y
0 srnd-demo Serhii 5.5 23.0 5.5
Как добится, чтобы все-таки Price в таблице была одна?
Ответ
Воспользуйтесь методом .reset_index() чтобы превратить все столбцы индекса/мульти-индекса в обычные столбцы:
In [245]: result
Out[245]:
Points
Project Assignee
srnd-demo Serhii 23
In [246]: array1
Out[246]:
Project Price
0 srnd-demo 5.5
In [247]: result.reset_index().merge(array1)
Out[247]:
Project Assignee Points Price
0 srnd-demo Serhii 23 5.5
UPDATE:
Если в DataFrame's присутствуют столбцы с одинаковыми наименованиями, которые не учавствуют в объединении (т.е. не были указаны в качестве параметра on, left_on, right_on), то в результате у этих столбцов появятся суффиксы (по умолчанию: '_x' - для левого DF и '_y' - для правого).
Пример:
In [259]: result
Out[259]:
Points Price
Project Assignee
srnd-demo Serhii 23 5.5
In [260]: array1
Out[260]:
Project Price
0 srnd-demo 5.5
In [257]: result.reset_index().merge(array1, on='Project')
Out[257]:
Project Assignee Points Price_x Price_y
0 srnd-demo Serhii 23 5.5 5.5
избавьтесь от дублирующих столбцов в одном из DF:
In [258]: result.reset_index().merge(array1.drop(['Price'], axis=1), on='Project')
Out[258]:
Project Assignee Points Price
0 srnd-demo Serhii 23 5.5
Комментариев нет:
Отправить комментарий