#python #pandas #dataframe
Написал код:
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 в таблице была одна?
Ответы
Ответ 1
Воспользуйтесь методом .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
Комментариев нет:
Отправить комментарий