Einfacher SVERWEIS mit Pandas - stehe auf dem Schlauch

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
chrismit2i
User
Beiträge: 4
Registriert: Samstag 8. Januar 2022, 23:31

Liebes Forum,

Da ich neu hier bin erstmal vielen Dank für die Aufnahme.

Kurz zu mir: Ich bin noch Neuling was Python und andere Programmiersprachen betrifft und bisher zumeist Einzelkämpfer.
Stackoverflow mag zwar gut sein aber manchmal steige ich da nicht so wirklich durch und da ich auf mein vermutlich simples Problem noch keine Antwort gefunden muss ich dieses wohl nun mal selber ausformulieren und hoffe dass ich mich hier künftig einbringen kann bzw. von euch lernen kann.

Ich habe ein großes Datenset (csv.-file) und will nun in einem Pandas Dataframe 1 Spalte hinzufügen. Wie das geht weiß ich, es geht jedoch um den Inhalt der Spalte.

Das Datenset sieht quasi wie folgt aus und ist aufsteigend nach Datum sortiert.

Name | Datum | Neue Spalte
Alpha | 01.01.19 |
Beta | 01.01.18 |
Alpha | 01.01.21 |
Beta | 01.01.20 |
Alpha | 01.01.17 |

In der neuen Spalte würde ich nun gerne ganz simpel das früheste Datum für den jeweiligen Namen ausgeben.
Für Alpha also immer der 01.01.17 und für Beta immer der 01.01.18.

Ich habe mir das ganze Dataframe dann aufsteigen nach Datum sortiert.
Meine neue Spalte habe ich wie folgt integriert:

dataframe["Neue Spalte"] = dataframe["Datum"].iloc[0]

Das ist natürlich falsch da mir für alle Einträge der Eintrag mit Index 0 in der Spalte angezeigt wird.
Wenn aufsteigend sortiert dann ist das also immer der 01.01.17.

Ich habe jedoch keine Ahnung wie man iteriert / loops ausführt etc. Und hier komme ich trotz Google, Stackoverflow etc. nicht weiter wobei die Lösung bestimmt total einfach ist. Im Endeffekt brauche ich für die Spalte ja nur einen SVERWEIS mit Suchkriterium "Name" und Spaltenindex "2". Da vorab und anschließend noch weitere Berechnungen folgen (Lasso Regression etc.) brauche ich es aber in Python und nicht in Excel.

Über etwas Hilfestellung wäre ich dankbar.

Beste Grüße

Chris
chrismit2i
User
Beiträge: 4
Registriert: Samstag 8. Januar 2022, 23:31

for Name in df:
df['FirstDate'] = df['Date'].min()

So weit kam ich nun schon mal. Aber so kriege ich natürlich nur den kleinsten Eintrag aus dem gesamten Dataframe.
Wie schaffe ich es nun den kleinsten Eintrag für den jeweiligen Namen auszugeben?
Sirius3
User
Beiträge: 17822
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn man bei Pandas Schleifen braucht, dann macht man meist etwas falsch.
Sortieren ist genauso überflüssig.
Erste Anlaufstelle sollte das Pandas-Tutorial sein.

Code: Alles auswählen

min_dates = df.groupby('Name').min()['Datum']
df['min_dates'] = min_dates[df['Name']].values
chrismit2i
User
Beiträge: 4
Registriert: Samstag 8. Januar 2022, 23:31

Vielen Dank!

Damit funktioniert es!

Dort und in zig Foren habe ich gewälzt ohne Ende.
Vllt hapert es auch einfach noch daran, dass ich nicht weiß was ich suchen muss.

Ich gelobe Besserung. :)
Sirius3
User
Beiträge: 17822
Registriert: Sonntag 21. Oktober 2012, 17:20

Um zu wissen, was man Suchen kann, muß man wissen, was es gibt, und dafür gibt es bei größeren Projekten immer eine Einführung. Bei Pandas ist der entscheidende Abschnitt hier: https://pandas.pydata.org/docs/user_gui ... l#grouping
Die 10min sind etwas optimistisch, aber das Durcharbeiten dieser Seite ist auf jeden Fall wichtig.
chrismit2i
User
Beiträge: 4
Registriert: Samstag 8. Januar 2022, 23:31

Vielen Dank für den Link!

Kommt für morgen Abend als Lesezeichen in die Favoriten.
Antworten