Python 在数据帧中删除行时的索引器错误

Python 在数据帧中删除行时的索引器错误,python,pandas,Python,Pandas,我有以下代码: for (i1, row1), (i2, row2) in pairwise(df.iterrows()): if row1['months_to_maturity'] == row2['months_to_maturity'] and row1['coupon'] == row2['coupon']: df = df.drop(df.index[[i1]]) 如果满足以下条件,我将尝试删除行 row1['months_to_ma

我有以下代码:

for (i1, row1), (i2, row2) in pairwise(df.iterrows()):
    if row1['months_to_maturity'] == row2['months_to_maturity'] and
            row1['coupon'] == row2['coupon']:
        df = df.drop(df.index[[i1]])
如果满足以下条件,我将尝试删除行

row1['months_to_maturity'] == row2['months_to_maturity'] and
    row1['coupon'] == row2['coupon']
pairwise(df.iterrows())
方法给出数据帧的当前行和下一行

不幸的是,当我执行上面的代码时,我得到了这个错误

索引器:索引12超出大小为12的轴1的界限


我在本节开始时打印了
print(len(df.index))
并打印了
12
,所以我有点不明白为什么
索引器会提升。

在我看来,您是在迭代行,匹配一个条件,然后根据满足的条件删除行。我不认为这是做你想做的事情的最佳方式

我将建议大家完全不同地做事。试试这个,给定数据帧df

df = pd.DataFrame({'a': [1,2,3,4,4,4,5,5,5]})
df['b'] = df.a
print (df)
   a  b
0  1  1
1  2  2
2  3  3
3  4  4
4  4  4
5  4  4
6  5  5
7  5  5
8  5  5
为了进入下一排,我可以

df_next = df.shift()
print (df_next)
    a   b
0 NaN NaN
1   1   1
2   2   2
3   3   3
4   4   4
5   4   4
6   4   4
7   5   5
8   5   5
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])
   a  b
0  1  1
1  2  2
2  3  3
3  4  4
6  5  5
要找到匹配的行并删除它们,我可以

df_next = df.shift()
print (df_next)
    a   b
0 NaN NaN
1   1   1
2   2   2
3   3   3
4   4   4
5   4   4
6   4   4
7   5   5
8   5   5
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])
   a  b
0  1  1
1  2  2
2  3  3
3  4  4
6  5  5
实际上,这归结为两行代码

df_next = df.shift()
df2 = df.drop(df.index[(df.b==df_nxt.b) & (df.a==df_nxt.a)])

这就是熊猫的魔力

为什么不使用基于两列的drop_副本
df.删除重复项(('months\u to\u duration','currency'),inplace=True)
重复行必须连续出现,还是要将重复项放在任何地方?@padraiccningham谢谢。我只是假设我不能将其用于特定的列。@Happyleapsec重复的行连续出现。@user131983,没问题,默认为所有列,但您可以传递一个子集:列标签或标签序列,