Как отформатировать фрейм данных в 2D-таблицуPython

Программы на Python
Anonymous
Как отформатировать фрейм данных в 2D-таблицу

Сообщение Anonymous »

У меня возникла следующая проблема с форматированием кадра данных pandas в 2D-формат.
Мои данные:

Код: Выделить всё

+----+------+-----------+---------+
|    | Jobs | Measure   |   Value |
|----+------+-----------+---------|
|  0 | Job1 | Temp      |    43   |
|  1 | Job1 | Humidity  |    65   |
|  2 | Job2 | Temp      |    48   |
|  3 | Job2 | TempS     |    97.4 |
|  4 | Job2 | Humidity  |   nan   |
|  5 | Job3 | Humidity  |    55   |
|  6 | Job1 | Temp      |    41   |
|  7 | Job1 | Duration  |    23   |
|  8 | Job3 | Temp      |    39   |
|  9 | Job1 | Temp      |   nan   |
| 10 | Job1 | Humidity  |    55   |
| 11 | Job2 | Temp      |    48   |
| 12 | Job2 | TempS     |    97.4 |
| 13 | Job2 | Humidity  |   nan   |
| 14 | Job3 | Humidity  |    55   |
| 15 | Job1 | Temp      |   nan   |
| 16 | Job1 | Duration  |    25   |
| 17 | Job3 | Temp      |   nan   |
| 18 | Job2 | Humidity  |    61   |
+----+------+-----------+---------+
и мой код на данный момент:

Код: Выделить всё

from tabulate import tabulate
import pandas as pd

df = pd.read_csv('logs.csv')

#print(df)

print(tabulate(df, headers='keys', tablefmt='psql'))

grouped = df.groupby(['Jobs','Measure'], dropna=True)
average_temp = grouped.mean()

errors = df.groupby(['Jobs','Measure']).agg(lambda x: x.isna().sum())

frames = [average_temp, errors]

df_merged = pd.concat(frames, axis=1).set_axis(['Avg', 'Error'], axis='columns')
print(df_merged)
и результат печати:

Код: Выделить всё

Table-1
Avg  Error
Jobs            Measure
Job1            Duration  24.0      0
Humidity  60.0      0
Temp      42.0      2
Job3            Humidity  55.0      0
Temp      39.0      1
Job2            Humidity  61.0      2
TempS     97.4      0
Temp      48.0      0
Как мне отформатировать эту таблицу примерно так:

Код: Выделить всё

Table-2
Jobs    Avg.Temp    Err.Temp    Avg.Humidity    Err.Humidity  Avg.Duration  ...
Job1        42.0        2           60.0             0            24.0
Job2        48.0        0           61.0             0            -
Job3        39.0        1           55.0             1            -
Итак, мы видим, что, например, Avg.Temp для Job1 в таблице 2 — это Avg.Temp. значение Job1->Temp в таблице 1. Другое дело, что не все задания должны иметь одинаковые поля показателей, а также могут различаться, например, для задания 2 у нас есть «TempS».

Подробнее здесь: https://stackoverflow.com/questions/787 ... a-2d-table

Вернуться в «Python»