0
votes

Nouvelle colonne dans Pandas Python à base d'état

Je suis assez nouveau à Pandas, d'où j'ai besoin d'aide de vos experts là-bas!

Je suis assez confus à la concaténation des données d'une ligne multiple. p> xxx pré>

mon fichier csv "my_raw.csv" contient des milliers de milliers de rangées avec 15 colonnes. p>

pendant que la colonne corporelle contient un message. La colonne IDD contient une clé d'attribution à ce message corporel spécifique. p>

Par exemple dans mon fichier CSV, comme suit; P>

                 Concat                                 Date/Time 
(ROW 1) Hello John                                    01/01/20 1:58
(ROW 2) Please wait for your turn while waiting
        for our staff to complete his task            01/01/20 17:59


4 commentaires

pouvez-vous bien montrer que vous avez besoin de votre sortie désirée


Mais pourquoi CD30010101 et CD30010102 doivent se regrouper? Ils ne sont pas le même identifiant. Sauf si vous avez une tolérance de x?


@jeril comme demandé, veuillez renvoyer le message mis à jour partagé. Merci


@Henryyik Le CD30010101 et CD30010102 représentent l'ID de ce message. Le corps a une limite de caractères, donc il va se diviser lorsqu'il a été envoyé au récepteur. L'UDH est désigné comme l'identité / la clé de ce message d'organisme particulier du même expéditeur


4 Réponses :


3
votes

Bienvenue sur le débordement de pile.

édité en fonction de votre nom de colonne réelle et nom de colonne souhaité:

Je viens de comprendre que vous voulez les regrouper par Expéditeur ainsi que uhg qui commence par les mêmes caractères (combien? Vous n'avez pas spécifié, alors je tiens à 5 caractères dans mon exemple ci-dessous). < p> Les éléments suivants doivent atteindre ce dont vous avez besoin: xxx

qui vous donne: Entrez la description de l'image ici


11 commentaires

Désolé pour la réponse tardive, j'étais occupé à manipuler quelque chose, va essayer de voter votre réponse dès que je récupère la main sur les codes. Se référant à votre question ci-dessus, oui, l'UDH est unique basé sur les 5 derniers chiffres. Appréciez vos commentaires et votre aide! Merci beaucoup!


Désolé de poser cette question, puis-je connaître le "concat_series_to_string" faire? Parce que quand j'essaie de le courir, cela m'a donné une erreur de "Nom non défini Concat_series_to_string". Merci pour l'accueil chaleureux aussi!


C'est juste une fonction d'assistance qui fait ''Join (série)


Salut @toukenzie désolé encore, il m'a donné une erreur de cela m'a donné une erreur de ValueError: Aucun axe nommé Date / heure nommée pour type d'objet Je crois que c'est la dernière ligne du Code ci-dessus


Votre Dataframe d'entrée est-elle la même chose que ce que vous avez spécifié? Je n'ai pas fait face à des erreurs.


Ahh désolé à ce sujet, dans le fichier CSV, il est reçu date / heure, je souhaite créer une nouvelle colonne reçue la date / heure reçue (dernière). Cela pourrait-il me dire que dois-je faire un amendement sur les codes?


@Syafiqrosli j'ai mis à jour ma réponse, j'espère que c'est ce que vous voulez!


Bonjour @toukenize, à la suite de vos codes donnés, je ne parviens à concéder que le corps uniquement avec l'UDH similaire. Par exemple, le corps UDH ABC0050101 n'acconcre pas avec UDH ABC0050102 et ABC0050103


Veuillez vérifier votre code et vos données (sont-ils des espaces de la chaîne) car l'opération groupby se trouve sur les 5 premiers caractères de UDH et de l'expéditeur et fonctionnait bien sur l'échantillon que vous avez fourni.


Je suis déjà .str.strip () la colonne UDH. J'ai remarqué que vous avez mentionné 5 premiers caractères d'UDH, cela aurait dû être les 5 derniers de l'UDH, alors je devrais l'écrire comme DF [UDH ']. STR [-5:].


Je n'ai aucune idée de ce que vous avez mis en œuvre. groupby fonctionne en regroupant la même chose, il ne regroupera rien si vous le modifiez à df ['udh']. STR [-5:] parce que les 5 derniers caractères sont différents.



0
votes

Pouvez-vous essayer ce qui suit: xxx


0 commentaires

0
votes

Je suppose que vous ne voulez que (presque) des lignes consécutives concates avec le même émetteur. En fait, l'opération requise est probablement plus un '' .join '' .join code> Pour assurer un espace entre des lignes consécutives.

Vous pouvez identifier des groupes sur des lignes consécutives avec le même émetteur avec (DF [' ']! = DF ["expéditeur']. Maj ()). Cumsum () Code>. P>

À la fin, vous pouvez faire: P>

  Sender                                               Body       Date/Time
1    ABC                                         Hello John   01/01/20 1:58
2    XYZ  Please Wait for your turn While waiting for ou...  01/01/20 17:59
3    ABC                                Your Parcel is Here  03/01/20 11:57


2 commentaires

En fait, je préfère cette réponse que la mienne. Bien qu'il fallait un moment pour que je puisse comprendre la condition de regroupement (df ["expéditeur]! = DF [" expéditeur ']. Maj ()). Cumsum ()


Bonjour @Serge Ballesta, appréciez votre aide! Basé à partir de votre code donné, l'unique identifiant que ce message corporel appartient à faire référence à l'UDH elle-même, le dernier caractère UDH. Apprécier ton aide



0
votes

Je le découvre, en utilisant .str [: - 1] dans la colonne UDH tout en sélectionnant la dernière date de la date / heure reçue.

groups = df.groupby([df['UDH'].str[:-1], 'Original Sender ID'])
df = groups.agg({'Body':''.join, 'Received Date/Time':max}).reset_index()
df = df.sort_values('Received Date/Time')
pd.options.display.width = 200
print(df.sort_values('Received Date/Time'))


0 commentaires