Comment créer rapidement des listes de bords (style de combinaisons itertools) à partir d'une trame de données pandas indexée booléenne (ou autre solution rapide ?)

PythonNoob

J'essaie de créer une liste de bords (un ensemble unique de a;b, a;c, a;f, etc, où a;b == b;a) à partir d'un très grand (long) cadre de données de pandas qui a deux colonnes . Les listes d'arêtes requises se situent entre toutes les combinaisons de lignes d'une colonne à condition que l'autre colonne ait la même valeur. Un exemple ci-dessous montre ceci :

df1 = pd.DataFrame({'A':['Mary', 'Mary', 'Mary', 'Clive','Clive','Clive', 'John', 'John'],
                   'B':['Apples','Oranges','Strawberries','Apples','Pears','Bananas','Bananas','Pears']})

Et ce dataframe ressemble à:

    A   B
0   Mary    Apples
1   Mary    Oranges
2   Mary    Strawberries
3   Clive   Apples
4   Clive   Pears
5   Clive   Bananas
6   John    Bananas
7   John    Pears

avec la sortie prévue ressemblant à ceci:

Apples; Oranges
Apples; Strawberries
Oranges; Strawberries
Apples; Pears
Apples; Bananas
Pears; Bananas

Ma solution actuelle est extrêmement lente et boucle sur les valeurs uniques de A (avec un pré-filtrage pour s'assurer que le nombre de A est > 1 (sinon pas de bord par paire)), en prenant des index booléens de la trame de données :

for person in df1['A'].unique():
    temp = df1[df1['A']==person]
    ...
    perform some combination\itertools on df1['B']

Cependant, parce que mon df1 est en réalité extrêmement volumineux, cela prend un temps démesuré : y a-t-il une astuce ici utilisant les lambdas et l'empilement qui me manque ? J'apprécie vraiment toute aide !

Mini-frigo

Que dis-tu de ça?

In [10]: df1.groupby('A')['B'].apply(lambda x : list(itertools.combinations(x,2)))  
Out[10]:
A
Clive    [(Apples, Pears), (Apples, Bananas), (Pears, B...
John                                    [(Bananas, Pears)]
Mary     [(Apples, Oranges), (Apples, Strawberries), (O...
Name: B, dtype: object

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  3. 3

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  4. 4

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  5. 5

    Passer la taille d'un tableau 2D à une fonction ?

  6. 6

    Exporter la table de l'arborescence vers CSV avec mise en forme

  7. 7

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  8. 8

    Créer un système Buzzer à l'aide de python

  9. 9

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  10. 10

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  11. 11

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  12. 12

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  13. 13

    Conversion double en BigDecimal en Java

  14. 14

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  15. 15

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  16. 16

    Comment vérifier si un utilisateur spécifique a un rôle? Discord js

  17. 17

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  18. 18

    Existe-t-il un moyen de voir si mon bot est hors ligne ?

  19. 19

    comment afficher un bouton au-dessus d'un autre élément ?

  20. 20

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  21. 21

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

chaudétiquette

Archive