2016-06-24 14 views
1

ich einen Datenrahmen haben dfeine Reihe fallen, während sie durch Pandas Iterieren Dataframe

Name dist 
aaaa  10 
bbbb  11 
cccc  41 
dddd  77 

Ich möchte Zeilen löschen, die dist weniger als 10 in die nächste Zeile. Der expexted Ausgang ist

Name dist 
aaaa  10 
cccc  41 
dddd  77 

Um dies zu tun, habe ich den folgenden Code

>>> for idx,row in df.iterrows(): 
...  if idx < df.shape[0]-1: 
...    if ((df.ix[idx+1,'dist_to_TSS']-df.ix[idx+1,'dist_to_TSS'])<10): 
...      df.drop(row) 
... 

Aber ich Fehler bekommen. Kannst du helfen?

Antwort

0

IIUC können Sie es auf diese Weise tun:

In [110]: df = df[df.dist.diff().fillna(100) >= 10] 

In [111]: df 
Out[111]: 
    Name dist 
0 aaaa 10 
2 cccc 41 
3 dddd 77 

Erläuterung:

In [100]: df.dist.diff() 
Out[100]: 
0  NaN 
1  1.0 
2 30.0 
3 36.0 
Name: dist, dtype: float64 

In [101]: df.dist.diff().fillna(100) 
Out[101]: 
0 100.0 
1  1.0 
2  30.0 
3  36.0 
Name: dist, dtype: float64 

In [102]: df.dist.diff().fillna(100) >= 10 
Out[102]: 
0  True 
1 False 
2  True 
3  True 
Name: dist, dtype: bool 
Verwandte Themen