сводить данные из CSV и хранить в датафрейме - PullRequest
1 голос
/ 24 февраля 2020

У меня есть такое требование:

У меня есть CSV-файл со следующими данными (это всего лишь пример, данные намного больше):

xxxx|A|B|C|D|E
xxxx|P|Q|R|S|T
DATE|L|M|N|O|P
01/02/1997|12|4|5|0|0
01/03/1998|71|2|4|8|0

Я хочу сохранить данные во фрейме данных так, чтобы столбцы были:

 A   01/02/1997   P   L  12
 B   01/02/1997   Q   M   4
 C   01/02/1997   R   N   5
 D   01/02/1997   S   O   0
 E   01/02/1997   T   P   0
 A   01/03/1998   P   L  71
 B   01/03/1998   Q   M   2
 C   01/03/1998   R   N   4
 D   01/03/1998   S   O   8
 E   01/03/1998   T   P   0 

В основном первый столбец должен быть повернут. кто-нибудь может помочь? имена и данные являются лишь примерами (пустышка)

1 Ответ

1 голос
/ 24 февраля 2020

Сначала создайте MultiIndex in columns по header=[0,1,2] параметру и преобразуйте первый столбец в индекс по index_col=[0] в read_csv:

df = pd.read_csv(filename, sep="|", header=[0,1,2], index_col=[0])
print (df)
xxxx         A  B  C  D  E
xxxx         P  Q  R  S  T
DATE         L  M  N  O  P
01/02/1997  12  4  5  0  0
01/03/1998  71  2  4  8  0

Detail :

print (df.columns)
MultiIndex([('A', 'P', 'L'),
            ('B', 'Q', 'M'),
            ('C', 'R', 'N'),
            ('D', 'S', 'O'),
            ('E', 'T', 'P')],
           names=['xxxx', 'xxxx', 'DATE'])

Затем транспонировать с помощью DataFrame.T, изменить форму на DataFrame.stack, отсортировать по DataFrame.sort_index, создать метки для MultiIndex на DataFrame.rename_axis и последнее преобразование MultiIndex Series в DataFrame на Series.reset_index:

df1 = (df.T
         .stack(dropna=False)
         .sort_index(level=3)
         .rename_axis(('a','b','c','d'))
         .reset_index(name='e'))
print (df1)
   a  b  c           d   e
0  A  P  L  01/02/1997  12
1  B  Q  M  01/02/1997   4
2  C  R  N  01/02/1997   5
3  D  S  O  01/02/1997   0
4  E  T  P  01/02/1997   0
5  A  P  L  01/03/1998  71
6  B  Q  M  01/03/1998   2
7  C  R  N  01/03/1998   4
8  D  S  O  01/03/1998   8
9  E  T  P  01/03/1998   0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...