Seite 1 von 1

wie man eine Summe mit mehreren Bedingungen durchführt

Verfasst: Montag 12. September 2022, 11:36
von IvanP
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

Re: wie man eine Summe mit mehreren Bedingungen durchführt

Verfasst: Mittwoch 14. September 2022, 09:17
von Sirius3
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']]