Boxplot с пандами в Python - PullRequest
       40

Boxplot с пандами в Python

0 голосов
/ 13 декабря 2018

вот так выглядит мой фрейм данных:

      PART  METHOD  J    P         AVG         STD
0       1   meth1   3   50      0.914482    0.007398
1       1   meth2   3   50      0.925134    0.005738
...    ...  ...     ... ...        ...         ...
190     4   meth4   7   150     0.913014    0.006144
191     4   meth4   7   200     0.914199    0.002962

И я хотел бы показать Boxplot с пандами, используя AVG и столбцы STD (среднее и стандартное отклонение), и я не знаюкак можно начать

Например, я хотел бы сравнить четыре метода для PART = 1, J = 3 и P = 50 через блокпост, чтобы увидеть, являются ли эти значения совместимыми (похожими) или нет.

Я очень потерян, какое-либо руководство?

РЕДАКТИРОВАТЬ: следующее изображение показывает, что я хотел бы.Где A, B, C и D - методы, и каждый блок создается значением AVG в сочетании с de STD для PART = 1, J = 3 и P = 50.

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете отфильтровать фрейм данных и создать блокпост с параметром.

filtered_df = df[(df['PART'] == 1) & (df['J'] == 3) & (df['P'] == 50)]
filtered_df.boxplot(column = 'AVG', by = 'METHOD', patch_artist = True)

Для следующего примера df

df = pd.DataFrame({'PART':np.random.randint(1,4,10000), 'METHOD':np.random.choice(list('ABCD'), 10000), 'J':np.random.randint(3,7, 10000), 'P':np.random.randint(50,100, 10000),'AVG':np.random.randn(10000),'STD':np.random.randn(10000)})

Вы получите

enter image description here

0 голосов
/ 13 декабря 2018

Вы пробовали

(df.groupby(['PART', 'J', 'P'])
 .get_group((1, 3, 50))
 .groupby('METHOD')
 .boxplot(column=['AVG', 'STD']));

, который на следующих данных выборки

      PART  METHOD  J    P         AVG         STD
0       1   meth1   3   50      0.914482    0.6398
1       1   meth1   3   50      0.583014    0.5144
2       1   meth2   3   50      0.425134    0.5738
3       1   meth2   3   50      0.914199    0.2962
4       4   meth4   7   150     0.913014    0.6144
5       4   meth4   7   200     0.914199    0.2962

производит

enter image description here


ОБНОВЛЕНИЕ

Учитывая последнее обновление поста, рассмотрите возможность выполнения

(df.groupby(['PART', 'J', 'P'])
 .get_group((1, 3, 50))
 .boxplot(column=['AVG', 'STD'], by='METHOD'));

, в результате чего

enter image description here

...