Панды: литье / разворот нескольких колонн от длинных до широких? - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь перенастроить свои данные из длинного в широкий на основе нескольких столбцов.Я в целом знаком с функцией приведения (из R) и функцией разворота, но ни одна из них не дает мне желаемого результата.

Пожалуйста, смотрите ниже - текущая таблица - это то, что у меня есть в данный момент:

d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'], 'col2': ['A','B','A','B','A','B','A','B','A','B'],
     'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)

Затем на промежуточной таблице изображены широкие данные, которые я хочу, где я группирую по оба Имя и Дата, а затем установите в столбце Результат значения.Для каждой Имени-Даты есть только один результат Изменения, поэтому единственный столбец, который мне нужно сделать широким, - это Тип.

Последний шаг - вычисление значений r ^ 2 для каждой Имени-Даты для обоих типов А и В. Это таблица вывода.

Я пытался использовать приведенную ниже функцию , а также функцию поворота.Любая помощь будет высоко ценится!

zz_cast=cast(df,'Type','Result(%)')
zz_pivot=df.pivot(index='Date',columns='Type', values='Result (%)')

enter image description here

1 Ответ

0 голосов
/ 21 ноября 2018

Это то, что я сделал для создания вашей промежуточной таблицы (широкие данные):

import numpy as np
import pandas as pd

d = {'Name': ['Tom','Tom','Tom','Tom','Tom','Tom','Jerry','Jerry','Jerry','Jerry'], 
 'Date': ['2018/07/31','2018/07/31','2018/04/30','2018/04/30','2018/01/31','2018/01/31','2018/10/31','2018/10/31','2018/07/31','2018/07/31'], 
 'Type': ['A','B','A','B','A','B','A','B','A','B'],
 'Result':[10,5,9,2,0,1,10,2,4,5],'Change:':[8,8,4,4,3,3,0,0,8,8]}
df = pd.DataFrame(data=d)

df.set_index(['Name','Date','Type']).unstack().reset_index()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...