2017-09-15 6 views
0

J'ai un DataFrame avec une colonne 'col1' avec des entiers dedans. Le DF peut avoir n'importe quoi de 100 jusqu'à 1mln rangées. Comment calculer la différence entre les deux valeurs dans les col1 telles que:pandas DF différence de colonne maximale entre paire de valeurs récursivement

row2 - row1 row3 - row2 row4 - row3 etc

et retour différence max?

Je sais comment utiliser loc, ILOC mais ne savent pas comment le forcer à passer par paire de valeurs et de passer à la prochaine paire

+2

'df ['col1']. Diff(). Max()'? – Zero

+0

J'ai raté l'appariement ... oui, ce que @JohnGalt a dit. – piRSquared

+0

Arghh .... à quel point est-il difficile de marquer PYTHON, quand c'est pour le langage PYTHON? –

Répondre

1
max(df[col_name].shift(-1)-df[col_name]) 

Le changement de fonction prend la valeur de la ligne suivante (ou deuxième rangée suivante si vous prenez do shift (-2)). En faisant df [col_name] .shift (-1), vous prenez pour une certaine ligne, la valeur qui est dans la ligne ci-dessous. Soustraire la valeur du courant de la valeur de df [nom_col] .shift (-1) vous donne par ligne la différence entre les lignes. Donc, dans une base de données, vous finirez avec une série de différences entre les lignes. Prenez le maximum et vous obtenez le maximum.

Example below col_1 == Original column, col_2 == df[col_1].shift(-1) 


> col_1 | col_2 
> 123 | 456 
> 456| 999 
> 999| nan 

Maintenant que vous venez de col_2 col_1 substract, prenez le maximum et obtenir la différence max.

+0

Veuillez expliquer comment votre réponse résout le problème. – Haris

+0

Le décalage de fonction prend la valeur de la ligne suivante (ou de la deuxième ligne suivante si vous prenez le décalage (-2)). En faisant df [col_name] .shift (-1), vous prenez pour une certaine ligne, la valeur qui est dans la ligne ci-dessous. Soustraire la valeur du courant de la valeur de df [nom_col] .shift (-1) vous donne par ligne la différence entre les lignes. Donc, dans une base de données, vous finirez avec une série de différences entre les lignes. Prenez le maximum et vous obtenez le maximum. – 5nv

+0

C'est bon. Je pense que c'est mieux si vous éditez votre réponse et ajoutez cette explication là. – Haris