транспонировать pandas столбцы с повторяющимися значениями - PullRequest
0 голосов
/ 30 мая 2020

У меня есть фрейм данных, как показано ниже

df1 = pd.DataFrame({'Gender':['Male','Male','Male','Male','Female','Female','Female','Female','Male','Male','Male','Male','Female','Female','Female','Female'],
                'Year' :[2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009,2008,2008,2009,2009],
           'rate':[2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6,2.3,3.2,4.5,6.7,5.6,3.2,3.5,2.6],
           'Heading':['TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123','TNMAB123',
                     'TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456','TNMAB456'],
           'target':[31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2,31.2,33.4,33.4,35.2,35.2,36.4,36.4,37.2],
            'day_type':['wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend','wk','wkend']})

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

Я хотел бы транспонировать / повернуть их, чтобы получить вывод, как показано ниже. Хотя я пробовал следующее, это не сработало.

df1.pivot(index='Year', columns='Heading', values='rate')

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

Обратите внимание, что я не ввел значения, так как структура столбцов таблицы более важна.

enter image description here

Вы можете мне помочь, пожалуйста?

1 Ответ

2 голосов
/ 30 мая 2020

Вы можете попробовать это. Вы можете использовать здесь df.unstack() и преобразовать мультииндекс в одноуровневый индекс, используя join.

df1 = df1.pivot_table(index=['Year','Gender'],columns='Heading',values='rate').unstack()

df1.columns = ['_'.join(i) for i in df1.columns.tolist()]

df1 
      TDAS3_Female  TDAS3_Male  TNMAB123_Female  TNMAB123_Male  TSAD4_Female  TSAD4_Male  TWQE2_Female  TWQE2_Male
Year
2008           NaN         NaN              6.3            2.3           NaN         NaN           NaN         NaN
2009           NaN         NaN              7.1            3.2           NaN         NaN           2.1         4.5
2010           5.3         5.6              NaN            NaN           NaN         NaN           4.2         6.7
2011           3.6         3.2              NaN            NaN           2.9         3.5           NaN         NaN
2012           NaN         NaN              NaN            NaN           6.2         2.6           NaN         NaN

Есть пара способы преобразования мультииндекса в одноуровневый. Используя df.colums или df.columns.tolist или pd.MultiIndex.to_flat_index

  • ['_'.join(i) for i in df1.columns.tolist()]
  • ['_'.join(i) for i in df1.columns]
  • ['_'.join(i) for i in df1.columns.to_flat_index()]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...