как преобразовать pandas фрейм данных из широкого в длинный при сохранении индекса? - PullRequest
2 голосов
/ 21 февраля 2020

Я хотел бы преобразовать фрейм данных из широкого в длинный, переходя от многих столбцов к двум столбцам, сохраняя при этом индекс. Я попробовал ниже, используя расплав. Пожалуйста, дайте мне знать, что мне не хватает.

nb фактический фрейм данных будет иметь сотни столбцов, поэтому я не могу перечислить их в коде.

создать фрейм данных:

df = pd.DataFrame(np.random.randint(0,100,size=(3, 3)), columns=list('ABC'),index = ['jan','feb','mar'])

вывод:

      A   B   C
jan  76   7  72
feb  29  15  69
mar   4  24   9

кадр данных расплава:

df2 = pd.melt(df.reset_index())

вывод:

     variable value
0     index   jan
1     index   feb
2     index   mar
3         A    76
4         A    29
5         A     4
6         B     7
7         B    15
8         B    24
9         C    72
10        C    69
11        C     9

желаемый вывод:

                variable  value
       jan         A     76
       feb         A     29
       mar         A      4
       jan         B      7
       feb         B     15
       mar         B     24
       jan         C     72
       feb         C     69
       mar         C      9

1 Ответ

2 голосов
/ 21 февраля 2020

С df.melt, вы можете использовать 'index' в качестве имени индекса, затем вернуть столбец 'index' в качестве индекса и переименовать:

df.reset_index().melt('index').set_index('index').rename_axis(None)

С df.stack также возможно, используя ниже :

(df.stack().rename_axis([None,'variable']).reset_index(-1,name='value')
                                              .sort_values('variable'))

    variable  value
jan        A     76
feb        A     29
mar        A      4
jan        B      7
feb        B     15
mar        B     24
jan        C     72
feb        C     69
mar        C      9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...