Pandas сводная таблица без многоиндексного возврата - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть следующие данные:

s = '{"j":{"0":"{}","1":"{}","2":"{}","3":"{}","4":"{}"},"l":{"0":"some","1":"some","2":"some","3":"some","4":"some"},"l_t":{"0":"thing","1":"thing","2":"thing","3":"thing","4":"thing"},"o_l":{"0":"one","1":"one","2":"two","3":"one","4":"one"},"s":{"0":"y","1":"y","2":"y","3":"y","4":"y"},"val":{"0":4,"1":4,"2":3,"3":4,"4":4},"v_text":{"0":"L","1":"L","2":"NLH","3":"L","4":"L"},"v_text_2":{"0":"light","1":"light","2":"neither heavy or light","3":"light","4":"light"},"v":{"0":"x","1":"x","2":"x","3":"x","4":"x"},"year":{"0":2020,"1":2020,"2":2020,"3":2020,"4":2020}}'
dt_test = pd.read_json(s)

, который выглядит как:

    j     l    l_t  o_l  s  val v_text                v_text_2  v  year
0  {}  some  thing  one  y    4      L                   light  x  2020
1  {}  some  thing  one  y    4      L                   light  x  2020
2  {}  some  thing  two  y    3    NLH  neither heavy or light  x  2020
3  {}  some  thing  one  y    4      L                   light  x  2020
4  {}  some  thing  one  y    4      L                   light  x  2020


и хотел бы создать сводную таблицу, но я не понимаю, почему сводная таблица В таблице, которую я создаю, в качестве столбца используется мультииндекс.

Вот что я пробовал:

dt_test.pivot_table(index="v_text_2", columns="l_t", aggfunc="count")

, который выглядит так:

                           j     l   o_l     s     v v_text   val  year
l_t                    thing thing thing thing thing  thing thing thing
v_text_2                                                               
light                      4     4     4     4     4      4     4     4
neither heavy or light     1     1     1     1     1      1     1     1

Я ожидаю, что он будет выглядеть так:

l_t                    thing
v_text_2                    
light                      4
neither heavy or light     1

В конечном итоге я хочу объединить эти данные, чтобы потом их можно было построить.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

В качестве альтернативы вы можете использовать pandas.crosstab:

pd.crosstab(df['v_text_2'],df['l_t'])

l_t                     thing
v_text_2                     
light                       4
neither heavy or light      1

Это даст тот же результат, что и ожидалось.

1 голос
/ 07 апреля 2020

На самом деле это довольно странное поведение - для pivot_table кроме функции agg, которую вы хотите использовать, вы также должны упомянуть столбец, к которому хотите применить его:

Например:

dt_test.pivot_table(index="v_text_2", aggfunc="count", columns="l_t", values="year")

Выходы:

l_t                     thing
v_text_2
light                       4
neither heavy or light      1
...