2016-10-06 5 views
1

Hier ist mein Datenrahmen:Pandas Datum Unterschied in einer Spalte

import pandas as pd 
df_manual = pd.DataFrame({'A': ['one', 'one', 'two', 'two', 'one'] , 
        'B': ['Ar', 'Br', 'Cr', 'Ar','Ar'] , 
        'C': ['12/15/2011', '11/11/2001', '08/7/2015', '07/3/1999','03/03/2000' ]}) 

Ich mag würde Spalte erstellen, die Datumsdifferenz für Spalt sehen enthalten würde (mit vorheriger Gruppierung). Hier ist, was ich schrieb:

df_manual['C']=pd.to_datetime(df_manual['C']) 
df_manual['diff'] = 
df_manual.groupby(['A'])['C'].transform(lambda x: x.diff()) 

Aber das Ergebnis ich nicht Tag Unterschied. Resultierende Differenz zwischen 2001-11-11 und 2000-03-03 ist ein Datum 1971-09-11, während ich die Anzahl der Tage dazwischen brauche.

Irgendeine Idee, wie man es erreicht?

Antwort

2

Verwenden apply statt transform:

df_manual['diff'] = df_manual.groupby(['A'])['C'].apply(lambda x: x.diff()) 

Die resultierende Ausgabe:

 A B   C  diff 
0 one Ar 2011-12-15  NaT 
1 one Br 2001-11-11 -3686 days 
2 two Cr 2015-08-07  NaT 
3 two Ar 1999-07-03 -5879 days 
4 one Ar 2000-03-03 -618 days 

Wenn Sie df_manual['diff'] wollen anstelle eines Timedelta eine ganze Zahl sein, verwenden Sie die dt.days Accessor:

df_manual['diff'] = df_manual.groupby(['A'])['C'].apply(lambda x: x.diff()).dt.days 
Verwandte Themen