Изменение только одной строки в столбце в Python - PullRequest
0 голосов
/ 05 июня 2018

Итак, фрейм данных

computer status   count
   A       on      45
           off     44
   B       on      34
           off     32
           rmt_off 12
   C       on      23
           off     23
           rmt_off 2

Я выполнил

df.set_index('status').T

, что дало мне

status     on   off   on   off   rmt_off   on   off   rmt_off
computer   A          B                   C
Count      45   45    34   32    12        23   23    2

Ожидаемый результат:

Computer   On   off   Rmt_off 
  A        45   45     NaN
  B        34   32     12
  C        23   23     2

Как сделать так, чтобы значения были представлены так?Есть ли встроенные функции?

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Попробуйте df.unstack (уровень = 1).

df.unstack(level=1) Out[84]: count<br> off on A NaN NaN B NaN NaN C NaN NaN

0 голосов
/ 05 июня 2018

Попробуйте исправить ваш фрейм данных с помощью replace и ffill, тогда мы сможем применить pivot к вашему исходному df, изменим длинный формат на широкий

df=df.replace('',np.nan).ffill()
df.pivot(*df.columns)
Out[437]: 
status     off    on  rmt_off
computer                     
A         44.0  45.0      NaN
B         32.0  34.0     12.0
C         23.0  23.0      2.0
0 голосов
/ 05 июня 2018

Использовать unstack, если MultiIndex один столбец DataFrame:

print (df.index)
MultiIndex(levels=[['A', 'B', 'C'], ['off', 'on', 'rmt_off']],
           labels=[[0, 0, 1, 1, 1, 2, 2, 2], [1, 0, 1, 0, 2, 1, 0, 2]],
           names=['computer', 'status'])

print (df['count'].unstack())
status     off    on  rmt_off
computer                     
A         44.0  45.0      NaN
B         32.0  34.0     12.0
C         23.0  23.0      2.0

РЕДАКТИРОВАТЬ: необходимо заменить пустые строки на NaN s с прямым заполнением, последнее использование pivot:

df['computer'] = df['computer'].mask(df['computer'] == '').ffill()
df = df.pivot('computer','status', 'count')
...