Как преобразовать каждую строку Pandas DataFrame в новую матрицу nxm? - PullRequest
1 голос
/ 13 марта 2020

Привет! Я сгенерировал кадр данных следующим образом:

Data     mS1  nS1   mS1S2   nS1S2
KC        1    9     1       18
KN        1    9     0       19
KD        1    9     1       18
NG        0    10    2       17

Теперь я хочу преобразовать каждую строку в новую матрицу 2x2: 1-й и 3-й и 2-й и 4-й столбцы

Для пример для K C:

 KC  1  1
-KC  9  18

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Критерии не ясны, но решение этой проблемы с игрушкой может быть:

import pandas as pd

df = pd.DataFrame({'mS1':[1,1,1,0],
                   'nS1':[9,9,9,10],
                   'mS1S2':[1,0,1,2],
                   'nS1S2':[18,10,19,17]},
                  index = ['KC', 'KN', 'KD', 'NG'])

d = {}
for r in df.itertuples():
    d[r[0]] = pd.DataFrame({'A':[r[1],r[3]],
                            'B':[r[2],r[4]]},
                           index = ['{}'.format(r[0]), '-{}'.format(r[0])])

d

, и вы получите словарь d с 4 кадрами данных:

{'KC':      A   B
       KC   1   9
      -KC   1  18,
 'KN':      A   B
       KN   1   9
      -KN   0  10,
 'KD':      A   B
       KD   1   9
      -KD   1  19,
 'NG':      A   B
       NG   0  10
      -NG   2  17}
1 голос
/ 13 марта 2020

Создайте подсказку или список, используя ключи из поля Data и используйте numpy.ndarray.reshape. Похоже, также необходимо использовать order='F' для желаемого результата:

d = {i: pd.DataFrame(r.to_numpy().reshape(2, 2, order='F'),
                     index=[f'{i}', f'-{i}'],
                     columns=['A', 'B'])
     for i, r in df.set_index('Data').iterrows()}

print(d['KC'])

[out]

     A   B
KC   1   1
-KC  9  18

l = [pd.DataFrame(r.to_numpy().reshape(2, 2, order='F'),
                  index=[f'{i}', f'-{i}'],
                  columns=['A', 'B'])
     for i, r in df.set_index('Data').iterrows()]

for d in l:
    print(d)

[out]

     A   B
KC   1   1
-KC  9  18

     A   B
KN   1   0
-KN  9  19

     A   B
KD   1   1
-KD  9  18

      A   B
NG    0   2
-NG  10  17
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...