Heim >Backend-Entwicklung >Python-Tutorial >Wie verkette ich Zeichenfolgen aus mehreren Zeilen in Pandas mithilfe von Groupby?

Wie verkette ich Zeichenfolgen aus mehreren Zeilen in Pandas mithilfe von Groupby?

Susan Sarandon
Susan SarandonOriginal
2024-12-15 12:17:14532Durchsuche

How to Concatenate Strings from Multiple Rows in Pandas Using Groupby?

Strings aus mehreren Zeilen mit Pandas Groupby verketten

Beim Arbeiten mit Datenrahmen kann es Situationen geben, in denen Sie Strings aus mehreren Zeilen konsolidieren müssen während Sie sie nach bestimmten Kriterien gruppieren. Pandas bietet hierfür durch seine Groupby- und Transformationsfunktionen eine praktische Lösung.

Problemstellung

Gegeben sei ein Datenrahmen mit den Spalten „Name“, „Text“ und „Monat“. Das Ziel besteht darin, die Zeichenfolgen in der Spalte „Text“ für jede eindeutige Kombination aus „Name“ und „Monat“ zu verketten. Die gewünschte Ausgabe ist ein Datenrahmen mit eindeutigen Kombinationen aus „Name“ und „Monat“ und den verketteten „Text“-Werten.

Lösung

Um dies zu erreichen, können Sie verwenden Führen Sie die folgenden Schritte aus:

  1. Gruppieren Sie den Datenrahmen nach „Name“ und „Monat“ mithilfe von groupby() Funktion.
  2. Verwenden Sie die Funktion transform(), um einen Lambda-Ausdruck anzuwenden, der die „Text“-Einträge für jede Gruppe verbindet.
  3. Um doppelte Zeilen zu entfernen, löschen Sie die Duplikate mithilfe von aus dem resultierenden Datenrahmen drop_duplicates()-Funktion.

Hier ist ein Beispielcode:

import pandas as pd
from io import StringIO

data = StringIO("""
"name1","hej","2014-11-01"
"name1","du","2014-11-02"
"name1","aj","2014-12-01"
"name1","oj","2014-12-02"
"name2","fin","2014-11-01"
"name2","katt","2014-11-02"
"name2","mycket","2014-12-01"
"name2","lite","2014-12-01"
""")

# load string as stream into dataframe
df = pd.read_csv(data, header=0, names=["name", "text", "date"], parse_dates=[2])

# add column with month
df["month"] = df["date"].apply(lambda x: x.month)

df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()

Der obige Code generiert einen Datenrahmen mit dem gewünschten Ergebnis:

    name         text  month
0  name1       hej,du     11
2  name1        aj,oj     12
4  name2     fin,katt     11
6  name2  mycket,lite     12

Alternative Lösung

Anstatt transform() zu verwenden, können Sie auch apply() und dann reset_index() verwenden um das gleiche Ergebnis zu erzielen. Der aktualisierte Code wäre:

df.groupby(['name','month'])['text'].apply(','.join).reset_index()

Diese vereinfachte Version eliminiert den Lambda-Ausdruck und bietet eine prägnantere Lösung.

Das obige ist der detaillierte Inhalt vonWie verkette ich Zeichenfolgen aus mehreren Zeilen in Pandas mithilfe von Groupby?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn