#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. Я рад, что смог вам помочь 🙂