Преобразуйте данные нескольких столбцов в один столбец для каждого объекта groupby - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть датафрейм df:

df = pd.DataFrame({'ID': ['1','1','2'], \ 'diag1': ['C1.10', 'E10.40','F20.00'], \ 'diag2': ['M30', '','O92.15'], \ 'diag3': ['E15.34', 'H20.00','']})

Я хочу создать новый фрейм данных df1, который должен содержать всю информацию, представленную в столбцах df['diag1'], df['diag2'] и df['diag3'] на основе каждого ID, в один столбец df1['diag_all'].

Должен ли я использовать метод transform для достижения этого или есть какая-либо другая функция для этого?

Вот чего я хочу достичь: ID diag_all 0 1 C1.10 1 1 E10.40 2 1 F20.00 3 1 M30 4 1 O92.15 5 2 E15.34 6 2 H20.00

Пожалуйста, помните, что у меня есть много других столбцов в фактическом фрейме данных, которые я не хочу использовать во время этого преобразования. Поэтому нам нужно указать столбцы в df, которые мы хотим преобразовать в df1['diag_all'].

1 Ответ

1 голос
/ 03 апреля 2019

Соответствующий вывод DataFrame с некоторым допуском на тип пропуска для пропуска и новый индекс.

import pandas as pd
import numpy as np

df = pd.DataFrame({'ID': ['1','1','2'], \
                   'diag1': ['C1.10', 'E10.40','F20.00'], \
                   'diag2': ['M30', '','O92.15'], \
                   'diag3': ['E15.34', 'H20.00','']})

df.replace(r'^\s*$', np.nan, regex=True, inplace=True)
df1 = pd.melt(df, id_vars=['ID'], value_vars=['diag1', 'diag2', 'diag3'], value_name='diag_all')[['ID', 'diag_all']]
df1 = df1.sort_values(['ID']).dropna().reset_index().drop(['index'], axis=1)
print(df1)
  ID diag_all
0  1    C1.10
1  1   E10.40
2  1      M30
3  1   E15.34
4  1   H20.00
5  2   F20.00
6  2   O92.15
...