2 votes

Pandas : sauvegarder les lignes uniques à une catégorie

J'ai beaucoup de catégories avec des éléments dans des listes comme celles-ci :

colors = ['green', 'red']
animals = ['cat', 'dog']

J'ai un grand cadre de données qui contient tous les éléments dans les catégories, comme suit :

largedf = pd.DataFrame({'arow': ['row1', 'row2', 'row3', 'row4'], 'green': ['a', 'b', 'b', 'a'], 'red': ['a', 'b', 'b', 'a'], 
                   'cat': ['b', 'a', 'b', 'a'], 'dog': ['b', 'a', 'b', 'a']})
    arow    cat dog     green   red
0   row1    b   b       b       a
1   row2    a   a       b       b
2   row3    b   b       b       b
3   row4    a   a       a       a

Je veux sauvegarder uniquement les lignes où a est la valeur pour une certaine catégorie et seulement cette catégorie. row3 ne serait pas sauvée parce qu'elle a b pour tous les articles, row4 ne serait pas sauvée parce qu'elle a a pour tous les articles.

row1 serait sauvé parce qu'il a un a para red (même s'il existe un b pour le vert, au moins un a fait partie de cette catégorie).

row2 serait sauvé parce qu'il y a au moins un a en cat/dog (dans ce cas, un a dans les deux cas).

Pour chaque rangée sauvegardée, j'aimerais avoir une colonne listant la catégorie qui a a et le pourcentage de a dans cette catégorie (voir le résultat ci-dessous).

shorterdf = pd.DataFrame({'arow': ['row1', 'row2'], 'green': ['a', 'b'], 'red': ['a', 'b'], 'cat': ['b', 'a'], 'dog': ['b', 'a']})
    arow    cat dog     green   red  category   percent
0   row1    b   b       b       a    colors     0.5
1   row2    a   a       b       b    animals    1

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X