Résumer des sous-ensembles de données#

Supposons que nous voulions résumer nos données, par exemple en les divisant en groupes selon le nom de fichier et en calculant les mesures d’intensité moyenne pour ces groupes. Cela nous donnera un tableau plus petit avec des mesures résumées par fichier.

Voir aussi

import pandas as pd
import numpy as np

Pour démontrer l’exemple, nous chargeons un tableau qui contient des mesures de forme de nombreux objets qui ont été segmentés dans plusieurs fichiers de l’ensemble de données Broad Bioimage Benchmark Collection BBB0007 de Jones et al., Proc. ICCV Workshop on Computer Vision for Biomedical Image Applications, 2005).

df = pd.read_csv('../../data/BBBC007_analysis.csv')
df
area intensity_mean major_axis_length minor_axis_length aspect_ratio file_name
0 139 96.546763 17.504104 10.292770 1.700621 20P1_POS0010_D_1UL
1 360 86.613889 35.746808 14.983124 2.385805 20P1_POS0010_D_1UL
2 43 91.488372 12.967884 4.351573 2.980045 20P1_POS0010_D_1UL
3 140 73.742857 18.940508 10.314404 1.836316 20P1_POS0010_D_1UL
4 144 89.375000 13.639308 13.458532 1.013432 20P1_POS0010_D_1UL
... ... ... ... ... ... ...
106 305 88.252459 20.226532 19.244210 1.051045 20P1_POS0007_D_1UL
107 593 89.905565 36.508370 21.365394 1.708762 20P1_POS0007_D_1UL
108 289 106.851211 20.427809 18.221452 1.121086 20P1_POS0007_D_1UL
109 277 100.664260 20.307965 17.432920 1.164920 20P1_POS0007_D_1UL
110 46 70.869565 11.648895 5.298003 2.198733 20P1_POS0007_D_1UL

111 rows × 6 columns

Groupement par nom de fichier#

Nous allons maintenant grouper le tableau par nom de fichier image.

grouped_df = df.groupby('file_name')
grouped_df
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x000002DC95CF2520>

À partir de cet objet grouped_df, nous pouvons dériver des statistiques de base, par exemple la moyenne de toutes les colonnes numériques.

summary_df = grouped_df.mean(numeric_only = True)
summary_df
area intensity_mean major_axis_length minor_axis_length aspect_ratio
file_name
20P1_POS0007_D_1UL 300.859375 95.889956 22.015742 17.132505 1.316197
20P1_POS0010_D_1UL 253.361702 96.745373 20.120268 15.330923 1.402934

Le dataframe de sortie contient les valeurs moyennes de toutes les quantités, y compris les intensités que nous voulions. Notez que ce dataframe a ‘filename’ comme nom de l’index des lignes. Pour le convertir en un tableau normal avec une colonne d’index numérique, nous pouvons utiliser la méthode reset_index().

summary_df.reset_index()
file_name area intensity_mean major_axis_length minor_axis_length aspect_ratio
0 20P1_POS0007_D_1UL 300.859375 95.889956 22.015742 17.132505 1.316197
1 20P1_POS0010_D_1UL 253.361702 96.745373 20.120268 15.330923 1.402934

Notez cependant que cela n’a pas été fait sur place. summary_df a toujours un index étiqueté round. Si vous voulez mettre à jour votre tableau, vous devez le faire explicitement avec un opérateur d’assignation.

summary_df = summary_df.reset_index()
summary_df
file_name area intensity_mean major_axis_length minor_axis_length aspect_ratio
0 20P1_POS0007_D_1UL 300.859375 95.889956 22.015742 17.132505 1.316197
1 20P1_POS0010_D_1UL 253.361702 96.745373 20.120268 15.330923 1.402934