Как превратить pandas сводную таблицу в простую таблицу - PullRequest
1 голос
/ 06 апреля 2020

У меня есть простой DataFrame, определяемый как:

df = pd.DataFrame({
    'year': [2019, 2020, 2019, 2020, 2019, 2020, 2019, 2020],
    'name': ['Alice', 'Alice', 'Alice', 'Alice', 'Bob', 'Bob', 'Bob', 'Bob'],
    'sales': [100, 200, 300, 400, 500, 600, 700, 800]
})

Этот DataFrame легко превращается в сводную таблицу с помощью pivot_table:

table = pd.pivot_table(
    df,
    index=['name'],
    columns=['year'],
    aggfunc=np.sum)

table dataframe

Теперь мне нужно превратить этот DataFrame в простой JSON массив. К сожалению, метод to_json не возвращает простой массив:

table.reset_index().to_json(orient="records")
[
    {
      "["name",""]":"Alice",
      "["sales",2019]":400,
      "["sales",2020]":600
    },
    {
     "["name",""]":"Bob",
     "["sales",2019]":1200,
     "["sales",2020]":1400}
]

Как я могу превратить table DataFrame в простой (без мультииндекса) DataFrame?

[
    {
      "name":"Alice",
      "2019":400,
      "2020":600
    },
    {
     "name":"Bob",
     "2019":1200,
     "2020":1400
    }
]

1 Ответ

0 голосов
/ 06 апреля 2020

вам нужно передать параметр values, чтобы избавиться от мультииндекса, а также избавиться от списков в параметре внутри сводки при пропуске одного столбца:

table = pd.pivot_table(
df,
index='name',
columns='year',
values='sales',
aggfunc=np.sum)

table.reset_index().to_json(orient="records")

'[{"name":"Alice","2019":400,"2020":600},{"name":"Bob","2019":1200,"2020":1400}]'

Добавление другой альтернативы, если вам нравится:

out = (df.groupby(['name','year'])['sales'].sum().unstack()
                  .reset_index().to_json(orient='records'))

'[{"name":"Alice","2019":400,"2020":600},{"name":"Bob","2019":1200,"2020":1400}]'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...