#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
Комментариев нет:
Отправить комментарий