Pandas: развернуть типизированный набор данных - PullRequest
2 голосов
/ 10 июля 2020

Предположим, у меня есть данные в следующем формате:

Time, Type, Subtype, Value
0,A,Ab,1
0,A,Ac,2
0,B,Ba,1

И мне нужно:

Time, Type-A-Ab-Value, Type-A-Ac-Value, Type-B-Ba-Value
0, 1, 2, 1

Есть ли примитив pandas, который решит эту проблему одним махом?

1 Ответ

2 голосов
/ 10 июля 2020

Используйте DataFrame.set_index, чтобы установить многоуровневый индекс, затем используйте DataFrame.unstack на уровнях 1, 2, чтобы изменить форму фрейма данных, затем используйте .map, чтобы сгладить MultiIndex столбцы:

df1 = df.set_index(['Time', 'Type', 'Subtype']).unstack(level=[1, 2])
df1.columns = df1.columns.map(lambda s: 'Type-' + '-'.join(s[1:]) + '-Value')

ИЛИ, также можно использовать DataFrame.pivot:

df['pvt'] = 'Type-' + df['Type'] + '-' + df['Subtype'] + '-Value'
df1 = df.pivot('Time', 'pvt', 'Value').rename_axis(columns=None)

Результат:

print(df1)

      Type-A-Ab-Value  Type-A-Ac-Value  Type-B-Ba-Value
Time                                                   
0                   1                2                1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...