J'ai un dataframe avec 3 colonnes:
df:
x y z
334 290 3350.0
334 291 3350.5
334 292 3360.1
335 292 3360.1
335 292 3360.1
335 290 3351.0
335 290 3352.5
335 291 3333.1
335 291 3333.1
.
.
Je voudrais vérifier et analyser les valeurs de chaque ligne de row = n
à row = n+7
dans une nouvelle trame de données en fonction de quelques conditions:
Si tous ces éléments sont satisfaits, je souhaite écrire un nouveau dataframe:
df_new = pd.concat([df[n], df[n+1], df[n+2], df[n+3],
df[n+4], df[n+5], df[n+6], df[n+7]])
Ainsi, l'algorithme + la sortie ressemblerait à:
for df[n] = 0:
1) [334 290 3350.0] != [334 291 3350.5] True
2) [334 290 3350.0] != [335 292 3360.1] True
3) [334 290 3350.0] != [335 290 3351.0] True
4) 335 < 334 False
5) 335 > 335 False
Donc, dans ce cas, il sauterait la première itération jusqu'à ce que nous ayons parcouru toute la longueur de la trame de données et effectué des correspondances.
df_new(first iteration) = df_new.concat([....]) = empty row values
Existe-t-il un moyen simple de le faire avec rapidité Pandas
?
A. Obtenez les quarts de travail appropriés:
n1 = df.shift(-1)
n2 = df.shift(-2)
n3 = df.shift(-3)
n5 = df.shift(-5)
Satisfaire les conditions 1, 2 et 3:
cond = (df != n1) & (df != n3) & (df != n5)
C. Satisfaire les conditions 4, 5:
cond['holder'] = (df.x < n2.x) & (df.x < n3.x)
D. Obtenez une série booléenne (nous voulons n'importe quelle ligne avec tous les 'True'):
boolidx = cond.all(axis=1)
E. Utilisez pour obtenir le résultat:
df.loc[boolidx]
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots