Folgendes Szenario:
Ich habe 3 Dataframes:
df_products, df_service, df_contract
Die Produkte haben eine einzigartige ID. Zu einem Produkt existieren verschiedene Serviceleistungen und teilweise auch verschiedene Verträge für den gleichen Kunden.
Eine Serviceleistung hat u.a. eine Produktzuordnung, Einnahmen und Ausgaben.
Innerhalb eines Vertrags sind Pauschalleistungen vereinbart (darunter ein einmaliger Grundpreis und ein pauschaler Wartungspreis pro Stunde.
Nun möchte ich den Gewinn pro Produkt bestimmen.
Das Problem:
Die Dataframes sind getrennt und ich betrachte ca. 100K Produkte zu jeweils 1 Mio Services und wieder 100K Verträgen.
Ich möchte gerne ein neues Dataframe erzeugen mit Folgenden Informationen:
ProductID, Einnahmen für alle Leistungen, Ausgaben für Alle Leistungen, Gewinn / Verlust für alle Leistungen, Basispreis im Vertrag, Pauschaler Stundenpreis, Erbrachte Stundenleistung für betrachtetes Kalenderjahr, Gesamtprofit, Wie viele Services werfen Gewinn ab, Wie viele Services werfen Verlust ab.
Ich habe mir hierzu zunächst ein Dictionary erstellt und fülle dies in einer Schleife. Anbei der Schleifendurchlauf:
Code: Alles auswählen
for index, row in df_product.iterrows():
revenue = df_service[df_service['product_id']==row['product_id']]['revenue'].sum()
costs = df_service[df_service['product_id']==row['product_id']]['costs'].sum()
sum_ass = df_service[df_service['product_id']==row['product_id']]['sum'].sum()
net = df_contract[df_contract['product_id']==row['product_id']]['net_price'].values[0]
working_hours = df_contract[df_products['product_id']==row['product_id']]['hours'].values[0]
price_per_working_hour = df_contract[df_products['product_id']==row['product_id']]['price_per_hour'].values[0]
data_dict['product_id'].append(row['product_id'])
data_dict['count_positive_services'].append(
df_service[
(df_service['product_id']==row['product_id']) &
(df_service['current_total_sum'] < 0)
].shape[0]
)
data_dict['count_negative_services'].append(
df_service[
(df_service['product_id']==row['product_id']) &
(df_service['current_total_sum'] >= 0)
].shape[0]
)
data_dict['revenue_services'].append(revenue)
data_dict['costs_services'].append(costs)
data_dict['sum_services'].append(sum_ass)
data_dict['net'].append(net)
data_dict['working_hours'].append(working_hours)
data_dict['price_per_working_hour'].append(price_per_working_hour)
data_dict['total_profit'].append(
working_hours * price_per_working_hour + net + sum_ass
)
Das Programm läuft seit über einer Stunde und ist noch nicht am Ende.
Ich habe nur nicht die Erfahrung das zu optimieren.
Wäre dennoch schön es zu lernen

Kann mir vielleicht jemand helfen?
Vielen Dank und beste Grüße,