Mettre à jour la trame de données à partir d'une autre trame de données

Wk Ali

J'ai 2 tables, «transactions» avec plus de 500 millions de lignes et «clients» sur 3 millions de lignes

data <- data.frame(Trans = c(1,2,3,4,5), Cust01 = c("A","B","C","D","F"),
                   Cust02 = c("S","E","","TE","F"), Cust03 = c("F","","D","","F"))

cust_type <-data.frame(Cust = c("A","B","C","D"), Type = c("1","2","3","4"))

dataresult <- data.frame(Trans = c(1,2,3,4,5),
                         Cust01 = c("A","B","C","D","F"), 
                         Cust01Type = c("1","2","3","4","5"),
                         Cust02 = c("S","E","","TE","F"), 
                         Cust02Type = c("","","","",""),
                         Cust03 = c("F","","D","","F"),
                         Cust03Type = c("","","4","",""))

Je souhaite ajouter le type de client aux données de manière efficace. Normalement sql, j'utiliserai plusieurs jointures à gauche, j'ai essayé cela avec dplyrmais cela prend une éternité. J'ai également essayé d'utiliser %in%avec un retour logique, puis une boucle juste pour me concentrer sur les vraies valeurs. Est-ce que quelqu'un connaît une meilleure façon de faire cela?

Jaap

Lorsque vous voulez des performances rapides, rien ne vaut data.table(encore) le package. Comme vos données de transaction sont désormais au format large, la première étape à faire est de les convertir en format long. Cela facilitera le traitement.

library(data.table) #v1.9.5
trans_data <- melt(setDT(data), id.vars = "Trans",
                   variable.name = "Cust",               # set name variable column
                   variable.factor = TRUE,               # set as a factor variable instead of a character variable
                   value.name = "Cvalue")[!Cvalue==""]   # set name value column & remove empty cases

Lorsque vous avez fait cela, vous pouvez joindre les deux tables de données:

# set the keys by which you are joining
setDT(trans_data, key = "Cvalue")
setDT(cust_type, key = "Cust")

# join the customer type into the transaction data
trans_data[cust_type, Ctype:=Type]

cela donne:

> trans_data
    Trans   Cust Cvalue Ctype
 1:     1 Cust01      A     1
 2:     2 Cust01      B     2
 3:     3 Cust01      C     3
 4:     4 Cust01      D     4
 5:     3 Cust03      D     4
 6:     2 Cust02      E    NA
 7:     5 Cust01      F    NA
 8:     5 Cust02      F    NA
 9:     1 Cust03      F    NA
10:     5 Cust03      F    NA
11:     1 Cust02      S    NA
12:     4 Cust02     TE    NA

Si vous souhaitez modifier l'ordre dans le résultat data.table, vous pouvez le faire avec par exemple:

setorder(trans_data, Trans, Cust)

ou tout d'un coup avec:

trans_data <- trans_data[cust_type, Ctype:=Type][order(Trans,Cust)]

qui donne:

> trans_data
    Trans   Cust Cvalue Ctype
 1:     1 Cust01      A     1
 2:     1 Cust02      S    NA
 3:     1 Cust03      F    NA
 4:     2 Cust01      B     2
 5:     2 Cust02      E    NA
 6:     3 Cust01      C     3
 7:     3 Cust03      D     4
 8:     4 Cust01      D     4
 9:     4 Cust02     TE    NA
10:     5 Cust01      F    NA
11:     5 Cust02      F    NA
12:     5 Cust03      F    NA

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

mettre à jour une valeur de colonne dans une trame de données à partir d'une autre colonne correspondante dans une autre trame de données dans Pandas

Extraction de la trame de données pandas à partir d'une autre trame de données

comment mettre à jour une colonne spécifique d'une trame de données à partir d'une autre trame de données

Mettre à jour uniquement certaines valeurs d'une trame de données à l'aide d'une autre trame de données

Existe-t-il un moyen dans R de mettre à jour une trame de données à partir d'une autre trame de données ?

Mettre à jour une trame de données en fonction des valeurs d'une autre trame de données

Mettre à jour la trame / table de données à partir de données avec une structure similaire

Python Pandas met à jour une valeur de trame de données à partir d'une autre trame de données

Comment mettre à jour la trame de données en fonction des résultats d'une autre trame de données à l'aide de Pandas

Comment mettre à jour correctement la trame de données pandas à partir d'une trame de données filtrée qui a une colonne datetime

Comment mettre à jour la valeur de la colonne en fonction d'une autre trame de données

Ajouter des lignes manquantes à la trame de données à partir d'une autre trame de données dans R

Les pandas remplissent les valeurs manquantes dans la trame de données à partir d'une autre trame de données

Filtrer la trame de données pandas à la date d'une autre trame de données

itérer sur la trame de données pandas, mettre à jour la valeur des données d'une autre ligne et supprimer cette autre ligne

Filtrage de la trame de données en fonction d'une autre trame de données

Filtrage de la trame de données en fonction d'une autre trame de données

Mappage à partir d'une autre trame de données

Mettre à jour une colonne dans une trame de données avec une condition d'une autre trame de données en Python sans boucle For

Ajout d'une nouvelle colonne à la trame de données Spark en obtenant la recherche de données à partir d'une autre trame de données

Mettre à jour la trame de données en fonction de la correspondance dans une autre trame de données si la condition est remplie

Pandas Utilisation de l'index de la trame de données pandas pour mettre à jour une autre trame de données sur le même index

Modifier la valeur d'une autre trame de données

mettre à jour les valeurs en fonction du fait que les valeurs d'une autre colonne se trouvent dans la colonne d'une autre trame de données

Mettre à jour les valeurs de ligne dans une trame de données en fonction des valeurs d'une autre ligne?

réorganiser les groupes dans la trame de données en fonction du jour et du mois à partir d'un autre index de trame de données

Mappage de valeurs à une trame de données à partir d'une autre trame de données dans Pandas

Agréger une trame de données par intervalles de temps à partir d'une autre trame de données

Filtrer une trame de données à partir d'informations dans une autre trame de données à l'aide de Pandas

TOP liste

  1. 1

    Microsoft.WebApplication.targets

  2. 2

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

  3. 3

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  4. 4

    Comment analyser un hachage Ruby plat en un hachage imbriqué?

  5. 5

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

  6. 6

    Comment créer une nouvelle application dans Dropbox avec des autorisations complètes

  7. 7

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

  8. 8

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  9. 9

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

  10. 10

    php ajouter et fusionner des données de deux tables

  11. 11

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

  12. 12

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

  13. 13

    Comment changer la couleur de la police dans R?

  14. 14

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

    optimiser les opérations du serveur avec elasticsearch: traitement des filigranes de disque bas

  21. 21

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

chaudétiquette

Archive