Matroids Matheplanet Forum Index
Moderiert von mire2
Mathematische Software & Apps » Andere Softwarepakete » Python: Aufzählungsbedingung aufstellen
Autor
Universität/Hochschule J Python: Aufzählungsbedingung aufstellen
Eris23
Neu Letzter Besuch: im letzten Quartal
Dabei seit: 02.07.2022
Mitteilungen: 4
  Themenstart: 2022-07-03

Hallo zusammen, ich analysiere derzeit eine Datei und werde einen Clustering mit KMeans durchführen. Ziel dabei ist es eine neue CSV zu generieren, sodass die Kunden nach Alter und Ausgaben zu Clustern. Dabei möchte ich in Python herausfinden, wie viel der einzelne Kunde für einen Einkauf ausgibt. Bedienung sind 1. was der Kunde an den einen Tag ausgegeben hat (wenn Kunden ID gleich und der Transaktionsdatum übereinstimmt dann summiere Kosten -> Einkaufsliste) 2. wie viel der Kunde insgesamt ausgegeben hat (wenn Kunden ID gleich summiere Kosten -> Komplett ausgegeben). Dabei bräuchte ich euere Hilfe eine Funktion aufzustellen. Leider bin ich in den Themenfeld unerfahren. In der eine CSV-Datei werden die Transaktionen eines Online-Shops erfasst. Zur Verfügung gestellt wurden datum (t_dat), Kunden ID (customer_id), Artikel ID (article_id), Preis vom Produkt (price) und Verkaufskanal (sales_channel_id) Die Datei zeigt, dass Kunde xy ein Produkt gekauft hat. Es werden nur einzelne Artikel angezeigt und nicht, wie in der Einkaufsliste, wie viel er insgesamt ausgegeben hat. Dabei möchte ich eine neue spalte "Customer nr." in der Datei hinzufügen. Hierbei soll die Funktion bei einer Mein Gedanke wäre dabei, dass man einen if else Funktion macht. ist es möglich? und kann man das als zusätzliche Spalte, wie 'Kunden Nr. xxx'. Schon mal vielen lieben dank :) Beispiel ausschnitt: t_dat, customer_id, article_id, price, sales_channel_id 2018-09-20, 000058a12d5b43e67d225668fa1f8d618c13dc232df0cad8ffe7ad4a1091e318, 0663713001, 0.050830508474576264, 2 2018-09-20, 000058a12d5b43e67d225668fa1f8d618c13dc232df0cad8ffe7ad4a1091e318, 0541518023, 0.03049152542372881, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0505221004, 0.01523728813559322, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687003, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687004, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687001, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0505221001, 0.020322033898305086, 2 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0688873012, 0.03049152542372881, 1 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0501323011, 0.053372881355932204, 1 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0598859003, 0.0457457627118644, 2


   Profil
schnitzel
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 26.02.2009
Mitteilungen: 220
  Beitrag No.1, eingetragen 2022-07-04

Hi, hört sich für mich danach, dass du ein groupby durchführen möchtest. Also z.B.: \sourceon python s = """\ t_dat,customer_id,article_id,price,sales_channel_id 2018-09-20, 000058a12d5b43e67d225668fa1f8d618c13dc232df0cad8ffe7ad4a1091e318, 0663713001, 0.050830508474576264, 2 2018-09-20,000058a12d5b43e67d225668fa1f8d618c13dc232df0cad8ffe7ad4a1091e318, 0541518023, 0.03049152542372881, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0505221004, 0.01523728813559322, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687003, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687004, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0685687001, 0.016932203389830508, 2 2018-09-20, 00007d2de826758b65a93dd24ce629ed66842531df6699338c5570910a014cc2, 0505221001, 0.020322033898305086, 2 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0688873012, 0.03049152542372881, 1 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0501323011, 0.053372881355932204, 1 2018-09-20, 00083cda041544b2fbb0e0d2905ad17da7cf1007526fb4c73235dccbbc132280, 0598859003, 0.0457457627118644, 2 """ import pandas as pd from io import StringIO df = pd.read_csv(StringIO(s), parse_dates=[0], ) sale_per_day = df.groupby(by=['t_dat', 'customer_id'], as_index=False).sum() df.merge(sale_per_day, on=['t_dat', 'customer_id']) \sourceoff Gruß


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 3180
  Beitrag No.2, eingetragen 2022-07-04

Ich verstehe leider nicht, was du genau möchtest. Totale und durchschnittliche Ausgaben der Kunden könnte man wie folgt auslesen und zur Weiterverarbeitung bereitstellen. \sourceon Python \numberson from csv import DictReader def load_file(file_name): customers = {} with open(file_name) as f: reader = DictReader(f,skipinitialspace=True) for item in reader: c_id = item['customer_id'] date = item['t_dat'] price = float(item['price']) if c_id not in customers: customers[c_id] = {} if date not in customers[c_id]: customers[c_id][date] = [] customers[c_id][date].append(price) return customers def get_average(customers): return {c_id : sum( sum(customers[c_id][date]) for date in customers[c_id]) / len(customers[c_id]) for c_id in customers} def get_totals(customers): return {c_id : sum( sum(customers[c_id][date]) for date in customers[c_id]) for c_id in customers} if __name__ == "__main__": file_name = 'transactions.csv' customers = load_file(file_name) print(get_average(customers)) print(get_totals(customers)) \sourceoff [Die Antwort wurde vor Beitrag No.1 begonnen.]


   Profil
Eris23 hat die Antworten auf ihre/seine Frage gesehen.
Eris23 hat selbst das Ok-Häkchen gesetzt.
Eris23 wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2022 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]