Преобразование составных значений в столбцы в панде - PullRequest
1 голос
/ 14 апреля 2019

Предположим, у меня есть кадр данных pandas следующим образом:

Category    col1    col2    value
  A          a        a        1
  A          a        b        2
  A          b        a        3
  A          b        b        4
  B          a        a        5
  B          a        b        6
  B          b        a        7
  B          b        b        8          

Теперь я хочу изменить формат данных на следующий формат:

Category    aa    ab    ba    bb  
A            1     2     3     4
B            5     6     7     8

Я пробовал несколько подходов, но это не помоглот работа.Существует ли функция для достижения этой цели?

1 Ответ

1 голос
/ 14 апреля 2019

Объедините столбцы вместе с pivot:

df['new'] = df['col1'] + df['col2']
df1 = df.pivot('Category','new','value')
print (df1)
new       aa  ab  ba  bb
Category                
A          1   2   3   4
B          5   6   7   8

Или DataFrame.set_index с Series.unstack:

df1 = df.set_index(['Category',df['col1'] + df['col2']])['value'].unstack()
print (df1)
          aa  ab  ba  bb
Category                
A          1   2   3   4
B          5   6   7   8

Последний, если необходимо столбец из индекса:

df1 = df1.rename_axis(None, axis=1).reset_index()
print (df1)
  Category  aa  ab  ba  bb
0        A   1   2   3   4
1        B   5   6   7   8

Если возможна ошибка:

ValueError: Индекс содержит повторяющиеся записи, не может изменить форму

print (df)
  Category col1 col2  value
0        A    a    a      1
1        A    a    a      4
2        A    a    b      2
3        A    b    a      3
4        A    b    b      4
5        B    a    a      5
6        B    a    b      6
7        B    b    a      7
8        B    b    b      8

Затем необходимо DataFrame.pivot_table с функцией агрегирования, например, по умолчанию mean:

df['new'] = df['col1'] + df['col2']
df = df.pivot_table(index='Category',columns='new',values='value', aggfunc='mean')
print (df)
new        aa   ab   ba   bb
Category                    
A         2.5  2.0  3.0  4.0
B         5.0  6.0  7.0  8.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...