Как извлечь из столбца данных столбец и прикрепить его к строкам, сохранив при этом другие столбцы нетронутыми? - PullRequest
0 голосов
/ 23 октября 2018

Как извлечь столбец из кадра данных pandas, прикрепив его к строкам, сохранив при этом остальные столбцы.

Это мой пример набора данных.

import pandas as pd
import numpy as np
df = pd.DataFrame({'ID':  np.arange(0,5),
                  'sample_1' : [5,6,7,8,9],
                  'sample_2' : [10,11,12,13,14],
                  'group_id' : ["A","B","C","D","E"]})

Вывод, который я ищуfor is:

df2 = pd.DataFrame({'ID':  [0, 1, 2, 3, 4, 0, 1, 2, 3, 4],
                  'sample_1' : [5,6,7,8,9,10,11,12,13,14],
                  'group_id' : ["A","B","C","D","E","A","B","C","D","E"]})

Я попытался нарезать фрейм данных и выполнить конкататацию, используя pd.concat, но он давал значения NaN.

Мой оригинальный набор данных большой.

Ответы [ 3 ]

0 голосов
/ 23 октября 2018

Функция, которую вы ищете, называется melt

Например:

df2 = pd.melt(df, id_vars=['ID', 'group_id'], value_vars=['sample_1', 'sample_2'], value_name='sample_1')

df2 = df2.drop('variable', axis=1)
0 голосов
/ 23 октября 2018

Использование pd.wide_to_long:

res = pd.wide_to_long(df, stubnames='sample_', i='ID', j='group_id')
res.index = res.index.droplevel(1)
res = res.rename(columns={'sample_': 'sample_1'}).reset_index()

print(res)

   ID group_id  sample_1
0   0        A         5
1   1        B         6
2   2        C         7
3   3        D         8
4   4        E         9
5   0        A        10
6   1        B        11
7   2        C        12
8   3        D        13
9   4        E        14
0 голосов
/ 23 октября 2018

Вы можете сделать это, используя stack: установить индекс для столбцов, которые вы не хотите изменять, вызвать стек, отсортировать по столбцу «sample», а затем сбросить индекс:

df.set_index(['ID','group_id']).stack().sort_values(0).reset_index([0,1]).reset_index(drop=True)

   ID group_id   0
0   0        A   5
1   1        B   6
2   2        C   7
3   3        D   8
4   4        E   9
5   0        A  10
6   1        B  11
7   2        C  12
8   3        D  13
9   4        E  14
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...