Исправление мультииндекса после распаковки - PullRequest
0 голосов
/ 21 июня 2020

Я использую следующий код:

import pandas as pd
import numpy as np

month = [1, 1, 1, 1, 1, 2, 2, 2]
b = [1, 2, 3, 4, 1, 2, 3, 4]
c = [1, 0, 0, 1, 2, 3, 3, 0]
itemIDs = [5,1,1,4,5,2,2,2]
df = pd.DataFrame(data=month)
df.columns = ["month"]
df["partition"] = b
df["value"] = c
df["id"] = itemIDs
print(df)
print("")
# df=df.pivot(index="month",columns="partition",values="value")
df= df.groupby(["id","month","partition"]).agg(value=pd.NamedAgg(column="value",aggfunc="sum")).unstack("partition",fill_value=0)
df.reset_index(inplace=True,level=0)
df.columns= df.columns.droplevel()
df.to_csv("test.csv",index=False)
print(df)

Моя цель - суммировать все значения для каждого идентификатора за каждый месяц для каждого раздела и транспонировать разделы в каждой группе (идентификатор, месяц).

Приведенный выше код представляет собой комбинацию всех подсказок, которые я смог найти в Stackoverflow, но теперь моя проблема в том, что индекс не вычисляется должным образом. Я ожидал бы следующего индекса:

id, month, 1,2,3,4

, где числа 1-4 являются результатом операции транспонирования / разложения.

Фактический результат (без капли): введите описание изображения здесь

Кто-нибудь знает, как это исправить? Я знаю, что есть много многоиндексных вопросов, но все те, которые я изучал, у меня не работали (возможно, я использовал их неправильно, но я в отчаянии).

1 Ответ

3 голосов
/ 21 июня 2020

Во избежание добавления MultiIndex в столбцах value после agg для выбора столбца value в Series, последний добавляется DataFrame.reset_index для MultiIndex in index столбцов и DataFrame.rename_axis для удаления имен столбцов, здесь текст partition:

df = (df.groupby(["id","month","partition"])
        .agg(value=pd.NamedAgg(column="value",aggfunc="sum"))['value']
        .unstack("partition",fill_value=0)
        .reset_index()
        .rename_axis(None, axis=1))
# df.to_csv("test.csv",index=False)
print(df)
   id  month  1  2  3  4
0   1      1  0  0  0  0
1   2      2  0  3  3  0
2   4      1  0  0  0  1
3   5      1  3  0  0  0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...