pandas DataFrame unter Bedingungen aufsummieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
guhamail
User
Beiträge: 12
Registriert: Samstag 19. Februar 2022, 13:34

Guten Abend,

ich sitze an einem Problem, wo ich keinen Lösungsansatz habe.

Gegeben sind 2 DataFrame. Ich möchte Daten des zweiten DataFrame nutzen um Werte im ersten DataFrame aufsummieren.

Code: Alles auswählen


# Vorgabe
df = pd.DataFrame(
	{'A':  ['Berlin ist schön', 'München ist schöner',  'und Paris erstmal', 'wenn es regnet ist Berlin nicht schön'], 
	'B': [100, 150, 200, 300]})

df2 = pd.DataFrame(
	{'A': ['Berlin', 'Mailand', 'Paris', 'Madrid', 'Warschau']})

#Code....

#Ergebnis
print(df2)

	A		B
0	Berlin		400
1	Mailand		0
2	Paris		150
3	Madrid		0
4	Warschau	0


Ich möchte also mit jeder Zeile in df2['A'] prüfen, ob der Wert in df['A'] enthalten ist, df['B'] für jeden Treffer aufsummieren und an df2 eine Spalte mit den Summen anhängen.

Ich hoffe, ich habe mich halbwegs verständlich ausgedrückt. Mit str.contains() komme ich nicht zum Ziel. Mir fehlt jetzt völlig der Lösungsansatz. Könnt ihr mir weiter helfen?

Vielen Dank
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Mit str.extract kannst Du die Städtenamen extrahieren und dann damit weiterarbeiten.
karolus
User
Beiträge: 141
Registriert: Samstag 22. August 2009, 22:34

Hallo

Es geht zwar »einzeilig« aber mit dem »Schönheitsfehler« in der List-comprehension über die Daten von df2 zu iterieren :oops:

Code: Alles auswählen

import pandas as pd

df = pd.DataFrame(
	{'A':  ['Berlin ist schön', 'München ist schöner',  'und Paris erstmal', 'wenn es regnet ist Berlin nicht schön'], 
	'B': [100, 150, 200, 300]})

df2 = pd.DataFrame( {'A': ['Berlin', 'Mailand', 'Paris', 'Madrid', 'Warschau']})

df2['B'] = [df.loc[df.A.str.match(f'.*?{city}.*?'), 'B'].sum() for city in df2.A]

print(df2)
Antworten