请帮助。如何删除在一个ID的限制中第一个满足1的行之后的行?我有一个带有2级索引的数据框。
我尝试过
for i in range(1,6):
for j in range(2013,2016):
if example_i.loc[i,j]['default']>0:
example_i.drop(index=[i,j+1])
但这是一个错误:KeyError:2015
我尝试时也是一个问题
example_i.loc[4,2014]
因为没有这样的行。
答案 0 :(得分:1)
我无法想象一种将操作完全向量化的方法。但是很容易扫描数据框以建立要删除的行的列表。因此代码可能是:
cur = 0
to_drop = []
for row in example_i.itertuples():
if cur != row[0][0]:
cur = row[0][0]
drop = False
if drop:
to_drop.append(row[0])
if row[1] == 1:
drop = True
to_drop
现在应为[(1, 2015), (1, 2016), (2, 2016), (4, 2015), (4, 2016), (5, 2015), (5, 2016)]
所以这足以删除行:
example_i.drop(to_drop, inplace=True)
和我们预期的一样:
default
id time
1 2013 0
2014 1
2 2013 0
2014 0
2015 1
3 2013 0
2014 0
2015 0
2016 0
4 2013 1
5 2013 0
2014 1