2017-03-17 2 views
0

J'ai un pandas.Series de chaînes qui représentent les minutes d'une manière de compte à rebours, que je voudrais inverser pour l'avoir de manière chronologique croissante. Cela est, Considérez ce qui suit Series:Inversion personnalisée d'une série de minutes dans les pandas

pd.Series([ '30:00', '25:10', '22:30' ]) 
Out[1]: 
0 30:00 
1 25:10 
2 22:30 
dtype: object 

termes de la série sont Thee minutes: secondes. Je veux l'inverser et obtenir des secondes en tant que valeurs entières. C'est, le plus haut est '30: 00 ', que je voudrais être le point de départ, obtenant la valeur de 0. Pour '25: 10' je voudrais avoir 5*60-10=290. Pour '22: 30 'je veux 7.5*60=450 et ainsi de suite. Ainsi, je voudrais obtenir les séries suivantes:

0 0 
1 290 
2 450 
dtype: object 

Je sais que la série originale peut être converti en objets DateTime en utilisant pd.to_datetime. Mais je ne sais pas comment l'inverser à partir du compte à rebours pour augmenter les secondes.

Répondre

2

Un plus général et pandas géants approche spécifique en utilisant to_timedelta:

s = pd.to_timedelta('00:'+s).astype('timedelta64[s]') 
s = s.iloc[0] - s 

La sortie résultante:

0  0.0 
1 290.0 
2 450.0 
1

Vous pouvez utiliser apply() et une fonction de conversion pour ce faire:

code:

def count_down_from_30(time_string): 
    min, sec = [int(x) for x in time_string.split(':')] 
    return 30 * 60 - 60 * min - sec 

test:

data = pd.Series(['30:00', '25:10', '22:30']) 
data = data.apply(count_down_from_30) 
print(data) 

Résultats:

0  0 
1 290 
2 450 
dtype: int64