wie man eine Summe mit mehreren Bedingungen durchführt

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
IvanP
User
Beiträge: 1
Registriert: Montag 12. September 2022, 10:20

Hallo, ich bin aus Ukraine und hab eine Frage an Sie :)

Code: Alles auswählen

hab DataFrame:
df = {
  'payment': [59.7, 11.2, 12.45, 11, 23, 78, 80, 84.2],
  'user_id': [6, 8, 1566, 6, 3, 7, 6, 2011],
  'date': ['2019-11-01', '2019-11-14', '2019-11-01', '2019-02-05', '2019-01-10', '2019-11-03', '2019-12-01', '2019-11-11']
}
Ich brauche den Betrag nach dem Feld „payment“ berechnen, wenn das Mindestdatum in der Zone einer Benutzer-ID nach dem Feld „date“ + 1 Monat beträgt

das ist meine Code, aber er hat Fehler(

Code: Alles auswählen

from calendar import month
import pandas as pd

df = pd.read_csv('dump.csv')
df['date'] = pd.to_datetime(df['date'],format='%Y-%m-%d')
df=df.groupby(['user_id']).agg({'date':['min'],'payment':['sum']})
df['kmon']=df['date']+pd.DateOffset(months=1)

print(df.tail(5))
danke für die Hilfe
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

Die Umwandlung in datetime sollte schon beim Aufruf von read_csv passieren.

Dein Problem läßt sich nicht in einem Schritt erledigen.
Erst mußt Du das Mindestdatum pro Nutzer ermitteln, dieses dann mit dem ursprüngliche Dataframe mergen um dann filtern zu können:

Code: Alles auswählen

mindates = df.groupby(['user_id'])['date'].min() + pd.DateOffset(months=1)
mindates.name = 'kmon'
df_with_mindate = pd.merge(df, mindates, left_on='user_id', right_index=True)
df_filtered = df_with_mindate[df_with_mindate['date'] >= df_with_mindate['kmon']]
Antworten