Python 在遍历数据帧时删除行

Python 在遍历数据帧时删除行,python,pandas,Python,Pandas,我有一个数据帧df Name dist aaaa 10 bbbb 11 cccc 41 dddd 77 我想将距离小于10的行删除到下一行。expexted输出为 Name dist aaaa 10 cccc 41 dddd 77 为此,我使用了以下代码 >>> for idx,row in df.iterrows(): ... if idx < df.shape[0]-1: ...

我有一个数据帧df

Name    dist
aaaa     10
bbbb     11
cccc     41
dddd     77
我想将距离小于10的行删除到下一行。expexted输出为

Name    dist
aaaa     10
cccc     41
dddd     77
为此,我使用了以下代码

>>> 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)
... 
>对于idx,df.iterrows()中的行:
...     如果idx...             如果((df.ix[idx+1,'dist_to_TSS']-df.ix[idx+1,'dist_to_TSS'])IIUC,您可以这样做:

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
说明:

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

如果决定要删除哪些行的标准有点复杂,例如与上一行/下一行中的值相关,那么简单的方法是建立要删除的行的索引列表,然后在最后一次性删除它们。 e、 g

indexes_to_drop = []

for i in df.index:
    ....
    if {make your decision here}:
        indexes_to_drop.append(i)
    ....

df.drop(df.index[indexes_to_drop], inplace=True )