2016-08-01 22 views
1

Ich habe den Unterschied zwischen dem Start der aktuellen Woche und dem Start der Woche genommen, wobei das Datum die Datumsspalte ist. Dieser Unterschied ist in Tagen. Wenn ich versuche, Funktion zu definieren, um diese Tage in 1 Woche Unterschied, 2 Woche Unterschied und so weiter zu konvertieren.Wie konvertiert man Timedelta, das in Tagen in String ist?

Ich erhalte Fehler wie:

Kann nicht Typ 'Timedelta' mit Typ 'str'

Bitte helfen Sie mir vergleichen, dieses Problem zu beheben. Ich mache mir Sorgen darüber, dass ich falsch bin, wenn ich Funktionen definiere? hier ist der Code, der die Definition Funktion:

def check(diff): 
    for d in final_data['diff']: 
     if ((d > '0 days') and (d <= '7 days')): 
      weekdiff = 'OneWeekDiff' 
     elif ((d > '8 days') and (d <= '14 days')): 
      weekdiff = 'TwoWeekDiff' 
     else:  
      weekdiff = 'Current Week' 
    return weekdiff 

Um Differenz zwischen zwei Spalten herauszufinden, einfach habe ich Subtraktion wie folgt aus: final_data [ 'diff'] = final_data [ 'CurrentWeekStartDay'] - final_data [ 'InvoiceWeekstartDay'

]

print (final_data [ 'diff'] 0 14 Tage 1 14 Tage 2 14 Tage

+0

final_data [ 'diff'] können Sie diese und an die Frage drucken –

+0

Hallo Ich habe 'diff' coloumn hinzugefügt. Ich habe Ihren Code verwendet, aber immer noch denselben Fehler. –

Antwort

1

Sie konvertieren to_timedelta Saiten 0 days, 7 days ...:

Dann ändere ich etwas Funktion - Schleife entfernen und else. Sie können apply Funktion für die Spalte von DataFrame:

def check(d): 
    weekdiff = 'Current Week' 
    if ((d > pd.to_timedelta('0 days')) and (d <= pd.to_timedelta('7 days'))): 
     weekdiff = 'OneWeekDiff' 
    elif ((d > pd.to_timedelta('8 days')) and (d <= pd.to_timedelta('14 days'))): 
     weekdiff = 'TwoWeekDiff' 
    return weekdiff 

print (final_data['diff'].apply(check)) 

Probe:

final_data = pd.DataFrame({'b': {0: pd.Timestamp('2016-01-13 00:00:00'), 
           1: pd.Timestamp('2016-01-05 00:00:00'), 
           2: pd.Timestamp('2016-01-03 00:00:00')}, 
          'a': {0: pd.Timestamp('2016-01-01 00:00:00'), 
            1: pd.Timestamp('2016-01-02 00:00:00'), 
            2: pd.Timestamp('2016-01-03 00:00:00')}, 
          'diff': {0: pd.Timedelta('12 days 00:00:00'), 
            1: pd.Timedelta('3 days 00:00:00'), 
            2: pd.Timedelta('0 days 00:00:00')}}) 
print (final_data) 
      a   b diff 
0 2016-01-01 2016-01-13 12 days 
1 2016-01-02 2016-01-05 3 days 
2 2016-01-03 2016-01-03 0 days 

print (final_data['diff'].apply(check)) 
0  TwoWeekDiff 
1  OneWeekDiff 
2 Current Week 
Name: diff, dtype: object 
+0

Wenn meine Antwort hilfreich war, nicht vergessen [akzeptieren] (http://meta.stackexchange.com/a/5235/295067) es. Vielen Dank. – jezrael

+0

Verwenden Sie meine Funktion und denselben Fehler? – jezrael