0
votes

Comment combiner des valeurs dans une colonne par groupe?

J'ai ce fichier de données comme entrée Lecture de Excel: xxx

sortie souhaitée: xxx

J'ai essayé ce qui suit, les deux ont donné des erreurs xxx


0 commentaires

3 Réponses :


0
votes
# convert type to string you can also use .astype(str) which is vectorized
df["Data"] = df["Data"].map(str)
# group data by name, set index parameters false otherwise you will have "Name" as an index. Theoretically you could simply do ["Data"].apply(list) but aggregate is more scalable in case other columns will be added later on.
df = df.groupby(["Name"], as_index=False).aggregate({"Data": set})
# df["Data"] now contains a set, we want to get a ordered, concatenated string with the delimiter ";" out of it, therefore we use ";".join() to join a list to a string. I use .map which is not vectorized, and this part is therefore probably up for improvement.
df["Data"] = df["Data"].map(lambda x: ";".join(sorted(x)))

0 commentaires

1
votes

Un moyen simple de le faire est - xxx xxx


2 commentaires

Lorsque les valeurs de la colonne de données de l'entrée Dataframe sont des chiffres, il m'a donné "TypeError: Séquence de la séquence 0: Instance attendue STR, INT trouvé". Comment puis-je modifier le code si les valeurs de la colonne de données de l'entrée Dataframe sont des chiffres?:

-Merci.


juste faire df = df.astype (str) puis exécutez ce code



0
votes
  • Depuis que la colonne 'DATA>' DATA ' peut contenir des numéros (comme indiqué dans les commentaires), il est préférable de définir le dtype comme STR , car .join est un < Méthode de code> STR , et il est plus efficace, puis utilisez mappe à l'intérieur de la fonction Lambda (par exemple, Carte (STR, SET (X)) ).
  • Utilisez .groupby < / code> sur 'données' et .apply une fonction
    • lambda x: ''. Joindre (trié (défini (x))))
      • Chaque groupe contient des valeurs non uniques, utilisez donc Ensemble , car un définir ne peut contenir que des valeurs uniques.
      • Utilisez trié si vous Voulez-vous le résultat dans l'ordre, sinon remplacer trié (régler (x)) avec SET (x) . . xxx

1 commentaires

J'aime la solution, cela m'aide à comprendre le codage plus. Cependant, lorsque j'imprime la variable DFG, je n'ai plus de "nom" de colonne ... mais je le comprends. J'ai défini comme_index = true et ajouté .Reset_index () à la fin. J'ai eu cette idée de la solution d'Akshay. Merci.