Seite 1 von 1

pandas DataFrame unter Bedingungen aufsummieren

Verfasst: Mittwoch 10. Januar 2024, 21:09
von guhamail
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

Re: pandas DataFrame unter Bedingungen aufsummieren

Verfasst: Mittwoch 10. Januar 2024, 22:30
von Sirius3
Mit str.extract kannst Du die Städtenamen extrahieren und dann damit weiterarbeiten.

Re: pandas DataFrame unter Bedingungen aufsummieren

Verfasst: Montag 15. Januar 2024, 22:23
von karolus
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)