Расплавить данные панд с многоуровневым заголовком? - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть фрейм данных с 4 строками заголовка.Как это:

A01     A01     A01     A01     A01     A01
1       1       1       2       2       2
Mon     Mon     Mon     Tue     Tue     Tue
# Beverages     # Appliances    Avg. brewing duration   # Beverages     # Appliances    Avg. brewing duration
Americano       549     46      "101,5" 542     38
ApplianceOffRinsing     28.718  673     "52,6"  28.718  665
ApplianceOnRinsing      35.381  682     "180,8" 35.308  676
CafeAuLait      112     16      "124,4" 99      10

Как мне расплавить это в пандах?

Я прочитал это так:

df = pd.read_csv('sample.csv', header=[0, 1, 2, 3, 4], delimiter='\t')

И теперь это выглядит так:

enter image description here

Мне бы хотелось, чтобы выходные данные выглядели так:

A01  1   Mon   # Beverages    549
A01  1   Mon   # Applicances  46
...

с именами столбцов, которые я установил.

Я знаю, что это что-то вроде pd.melt(df, col_level=0, id_vars=['A'], value_vars=['B']), но я не уверен, как адаптировать это для моего случая использования, тем более что мои данные не имеют имен столбцов.

Добавление образцов данных сейчас ...

1 Ответ

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

Проблема в том, что первый столбец должен быть индексом, потому что только текстовый столбец.

Таким образом, при выводе получаются смешанные числовые и текстовые данные:

df2 = df.melt(var_name=['a','b','c','d'], value_name='e')
print (df2)
      a  b    c                    d                    e
0   A01  1  Mon           #Beverages            Americano
1   A01  1  Mon           #Beverages  ApplianceOffRinsing
2   A01  1  Mon           #Beverages   ApplianceOnRinsing
3   A01  1  Mon           #Beverages           CafeAuLait
4   A01  1  Mon          #Appliances                  549
5   A01  1  Mon          #Appliances               28.718
6   A01  1  Mon          #Appliances               35.381
7   A01  1  Mon          #Appliances                  112
8   A01  1  Mon  Avg.brewingduration                   46
9   A01  1  Mon  Avg.brewingduration                  673
10  A01  1  Mon  Avg.brewingduration                  682
11  A01  1  Mon  Avg.brewingduration                   16
12  A01  2  Tue           #Beverages                101,5
13  A01  2  Tue           #Beverages                 52,6
14  A01  2  Tue           #Beverages                180,8
15  A01  2  Tue           #Beverages                124,4
16  A01  2  Tue          #Appliances                  542
17  A01  2  Tue          #Appliances               28.718
18  A01  2  Tue          #Appliances               35.308
19  A01  2  Tue          #Appliances                   99
20  A01  2  Tue  Avg.brewingduration                   38
21  A01  2  Tue  Avg.brewingduration                  665
22  A01  2  Tue  Avg.brewingduration                  676
23  A01  2  Tue  Avg.brewingduration                   10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...