2016-09-06 1 views
4

Ich arbeite mit einem Datenrahmen, der so aussieht.Iterieren durch die Zeilen eines Datenrahmens und Neuzuweisen von Mindestwerten nach Gruppe

id time diff 
0 0 34 nan 
1 0 36 2 
2 1 43 7 
3 1 55 12 
4 1 59 4 
5 2 2 -57 
6 2 10 8 

Was eine effiziente Möglichkeit, die Mindestwerte für die ‚Zeit‘ von id zu finden ist, dann setzen ‚diff‘ zu nan bei diesen Minimalwerte. Ich suche nach einer Lösung gesucht, die in Ergebnisse:

id time diff 
0 0 34 nan 
1 0 36 2 
2 1 43 nan 
3 1 55 12 
4 1 59 4 
5 2 2 nan 
6 2 10 8 
+1

Dank für die Buchung ein Beispiel zuweisen, aber ich verstehe immer noch nicht, was Sie zu tun versuchen. Finde die Mindestwerte nach ID und setze sie auf nans? Warum ist dann die 7 für nan = 1 und nicht für die 4? – benten

+1

Ich versuche, das Element mit der geringsten Zeit pro Gruppe von IDs auf Nan festzulegen. –

Antwort

6

groupby('id') und verwenden idxmin zu finden, um die Lage der Mindestwerte von 'time': logisches Vektor NaN zu den entsprechenden Reihen zuzuordnen. Schließlich verwenden locnp.nan

df.loc[df.groupby('id').time.idxmin(), 'diff'] = np.nan 
df 

enter image description here

4

können Sie Gruppe die Zeit von id und berechnen einen logischen Vektor, bei dem, wenn die Zeit Minimum innerhalb der Gruppe ist, ist der Wert stimmt, sonst Falsch, und verwenden Sie die

import numpy as np 
import pandas as pd 
df.loc[df.groupby('id')['time'].apply(lambda g: g == min(g)), "diff"] = np.nan 

df 
# id time diff 
#0 0  34 NaN 
#1 0  36 2.0 
#2 1  43 NaN 
#3 1  55 12.0 
#4 1  59 4.0 
#5 2  2 NaN 
#6 2  10 8.0 
Verwandte Themen