Переформатирование значений в строке pandas в связанные столбцы

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных, который выглядит как:

 ID1 ID2 Issues  Value1  Value2  IssueDate
1   1   1   56.85490855 9.489650847 02/12/2015
1   1   2   89.55441203 23.60227363 07/02/2015
1   2   1   21.8456428  23.37353082 01/10/2015
2   2   1   55.10795933 1.928443984 13/08/2015
2   2   2   10.22459873 24.44298882 07/04/2015
4   1   1   55.29748656 6.308424035 19/02/2015
  

и я хочу, чтобы это было несколько фреймов данных (это значение 1, но представьте секунду для 2), которое выглядит как:

 Value 1                                                     
            2015_1  2015_2  2015_3  2015_4  2015_5  2015_6  2015_7I 2015_8  2015_9  2015_10 2015_11 2015_12
ID1 ID2
1   1           89.55441203                                     56.85490855
1   2                                           21.8456428      
2   2                   10.22459873             55.10795933             
4   1           55.29748656
  

Единственный способ, которым я могу понять, как это сделать, — использовать лямбда-функцию и добавлять значения в определенных диапазонах в связанные столбцы. Проблема в том, что мой набор данных очень большой, и попытка выполнить это движение построчно, перебирая каждую возможную комбинацию месяца / года, займет очень длительный период времени.

Есть ли умный способ использовать маски или расплавы для переформатирования данных в таблицы, которые я ищу?

Комментарии:

1. каков ожидаемый результат?

2. Посмотрите на pivot 🙂

3. @GhilasBELHADJ ожидаемый результат — это показанный второй фрейм данных. Я хочу преобразовать первое во второе.

Ответ №1:

Я предполагаю, что вы ищете что-то вроде этого

 df.IssueDate = pd.to_datetime(df.IssueDate)
df['Date'] = df.IssueDate.dt.year.astype(str)   '_'   df.IssueDate.dt.month.astype(str)
pd.pivot_table(df[['ID1', 'ID2', 'Value1', 'Date']], columns='Date', index=['ID1', 'ID2'])
  

Комментарии:

1. Это был ответ, который я искал, мне пришлось выполнить некоторое reset_indexing, чтобы получить заголовки, как я хотел. В частности, pivoted_data[‘Value1’].reset_index(), чтобы избавиться от иерархической индексации

2. Я рад, что смог вам помочь 🙂