J'ai une trame de données comme celle-ci
d={}
d['z']=['Q8','Q8','Q7','Q9','Q9']
d['t']=['10:30','10:31','10:38','10:40','10:41']
d['qty']=[20,20,9,12,12]
Je veux comparer la première rangée avec la deuxième rangée
La valeur souhaitée est
qty t z valid
0 20 2015-06-05 10:30:00 Q8 False
1 20 2015-06-05 10:31:00 Q8 True
2 9 2015-06-05 10:38:00 Q7 False
3 12 2015-06-05 10:40:00 Q9 False
4 12 2015-06-05 10:41:00 Q9 True
On dirait que vous souhaitez utiliser le Series.shift
méthode.
En utilisant cette méthode, vous pouvez générer de nouvelles colonnes qui sont décalées par rapport aux colonnes d'origine. Comme ça:
df['qty_s'] = df['qty'].shift(-1)
df['t_s'] = df['t'].shift(-1)
df['z_s'] = df['z'].shift(-1)
Maintenant, vous pouvez les comparer:
df['is_something'] = (df['qty'] == df['qty_s']) & (df['t'] < df['t_s']) & (df['z'] == df['z_s'])
Voici un exemple simplifié de la façon dont Series.shift
fonctionne pour comparer la ligne suivante à la ligne actuelle:
df = pd.DataFrame({"temp_celcius":pd.np.random.choice(10, 10) + 20}, index=pd.date_range("2015-05-15", "2015-05-24"))
df
temp_celcius
2015-05-15 21
2015-05-16 28
2015-05-17 27
2015-05-18 21
2015-05-19 25
2015-05-20 28
2015-05-21 25
2015-05-22 22
2015-05-23 29
2015-05-24 25
df["temp_c_yesterday"] = df["temp_celcius"].shift(1)
df
temp_celcius temp_c_yesterday
2015-05-15 21 NaN
2015-05-16 28 21
2015-05-17 27 28
2015-05-18 21 27
2015-05-19 25 21
2015-05-20 28 25
2015-05-21 25 28
2015-05-22 22 25
2015-05-23 29 22
2015-05-24 25 29
df["warmer_than_yesterday"] = df["temp_celcius"] > df["temp_c_yesterday"]
temp_celcius temp_c_yesterday warmer_than_yesterday
2015-05-15 21 NaN False
2015-05-16 28 21 True
2015-05-17 27 28 False
2015-05-18 21 27 False
2015-05-19 25 21 True
2015-05-20 28 25 True
2015-05-21 25 28 False
2015-05-22 22 25 False
2015-05-23 29 22 True
2015-05-24 25 29 False
Si j'ai mal compris votre requête, veuillez poster un commentaire et je mettrai à jour ma réponse.