Hier ist meine Datenrahmen:Pandas - Gruppe und verwandeln mit mehreren Argumenten
import pandas as pd
df = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'],
'B': ['Ar', 'Br', 'Cr', 'Ar', 'Ar'],
'C': ['12/15/2011', '11/11/2001', '08/30/2015', '07/3/1999', '03/03/2000'],
'D': [1, 7, 3, 4, 5],
'F': ['12/1/2011','10/1/2000','8/15/2015','12/1/2011','12/1/2011'] })
df['C'] = pd.to_datetime(df['C'])
df['F'] = pd.to_datetime(df['F'])
Ich möchte B
durch Spalte zu gruppieren und dann für jede Gruppe zu überprüfen, ob Spalte C
Datum enthält innerhalb von 30 Tagen nach der Spalte F
. Ich würde eine Anzeigesäule für die ganze Gruppe wieder, die wie
df['indicator'] = [1,0,1,1,1]
hier aussehen sollte ist, was ich versucht:
def date_test(x, y):
result = False
for i in x.index:
if x[i]<y[i]+ pd.Timedelta(days=30):
result = True
return result
df['indicator'] = df.groupby('B')['C','F'].transform(date_test).astype('int64')
Aber ich habe zurück TypeError: Transform function invalid for data types
Also ich denke, ich kann es nicht Übergeben Sie zwei Spalten, um die Funktion zu transformieren. Irgendwelche Gedanken?
zu lesen und zuzuweisen: 'df ['indicator'] = df.groupby ('B'). apply (date_test) .swaplevel(). reset_index (-1, drop = True) ' – Boud
@Boud danke um einen Kommentar hinzuzufügen. Es scheint, dass das Folgende auch funktioniert: df ['indicator'] = df.groupby ('B'). Apply (date_test) .reset_index (0, drop = True) 'oder fehlt mir etwas – user1700890