Транспортировка данных для создания нового фрейма данных для реструктуризации фрейма данных - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть CSV-файл, который содержит данные вдоль строк.Я хочу создать фрейм данных, перенеся все строки в столбцы. Я предоставил следующий пример фрейма данных, который копирует данные в csv.

data = pd.DataFrame()
data ['Name'] = ['A','B','C']
data ['Home'] = ['Z','Y','X']
data ['1-0'] = [2.2,3.1,3]
data['2-0'] = [1.5,5,8]
data ['2-1'] = [5,2,3]
data ['HW'] = [1.2,3.2,4]

Я хочу преобразовать столбцы '1-0','2-0', '2-1' для столбца нового фрейма данных и соответствующих ему данных для новых столбцов: Score .Первый столбец ** Имя ** будет использоваться в качестве нового столбца, но дублируется для всех результатов.

Ниже приводится ожидаемый результат.

enter image description here

В новом фрейме данных элемент из первого столбца Имя будет продублирован.Элементы во втором столбце Score - это некоторые имена столбцов из старого фрейма данных.Остальные столбцы, такие как HW , будут продублированы так же, как и столбец имени.

Могу ли я узнать, как его преобразовать?Ваш совет очень ценится.Благодарю.Zep.

1 Ответ

0 голосов
/ 15 декабря 2018

Попробуйте melt:

data.melt(['Name','Home','HW']).sort_values('Name')

Вывод:

  Name Home   HW variable  value
0    A    Z  1.2      1-0    2.2
3    A    Z  1.2      2-0    1.5
6    A    Z  1.2      2-1    5.0
1    B    Y  3.2      1-0    3.1
4    B    Y  3.2      2-0    5.0
7    B    Y  3.2      2-1    2.0
2    C    X  4.0      1-0    3.0
5    C    X  4.0      2-0    8.0
8    C    X  4.0      2-1    3.0

Также вы можете использовать set_index и stack:

data.set_index(['Name','Home','HW']).stack().reset_index()

Вывод:

  Name Home   HW variable  value
0    A    Z  1.2      1-0    2.2
3    A    Z  1.2      2-0    1.5
6    A    Z  1.2      2-1    5.0
1    B    Y  3.2      1-0    3.1
4    B    Y  3.2      2-0    5.0
7    B    Y  3.2      2-1    2.0
2    C    X  4.0      1-0    3.0
5    C    X  4.0      2-0    8.0
8    C    X  4.0      2-1    3.0
...