我有一个Pandas Dataframe,如下所示:
streak
0 1.0
1 2.0
2 0.0
3 1.0
4 2.0
5 0.0
6 0.0
我想删除0.0
列中第一个streak
后的每一行。
结果应如下所示:
streak
0 1.0
1 2.0
答案 0 :(得分:3)
获取idxmax
的第一个0
索引并按iloc
切片,只需要默认的唯一索引:
#df = df.reset_index(drop=True)
df = df.iloc[:df['streak'].eq(0).idxmax()]
print (df)
streak
0 1.0
1 2.0
<强>详细强>:
print (df['streak'].eq(0).idxmax())
2
编辑:要获得更一般的解决方案,必须使用numpy
- 按numpy.argmax
获取排名:
print (df)
streak
a 1.0
b 2.0
c 0.0
d 1.0
e 2.0
f 0.0
g 0.0
df = df.iloc[:df['streak'].eq(0).values.argmax()]
print (df)
streak
a 1.0
b 2.0
答案 1 :(得分:0)
这是numpy.where
的通用解决方案。它可以用于匹配任何指定值的第一个实例。
df = df.iloc[:np.where(df['streak']==0)[0][0]]
# streak
# 0 1.0
# 1 2.0