我需要过滤掉col2 = 3
所在的最后一行,但保留 Dataframe 的其余部分。
我可以这样做,同时保持相对于索引的顺序:
import pandas
d = {
'col1': [0, 1, 2, 3, 3, 3, 3, 4, 5, 6],
'col2': [0, 11, 21, 31, 32, 33, 34, 41, 51, 61]
}
df = pandas.DataFrame(d)
df2 = df[df['col1'] != 3]
df3 = df[df['col1'] == 3].iloc[:-1]
pandas.concat([df2,df3]).sort_index()
col1 col2
0 0 0
1 1 11
2 2 21
3 3 31
4 3 32
5 3 33
7 4 41
8 5 51
9 6 61
但是对于更大的 Dataframe ,执行此操作的开销会逐渐增加。
有没有更有效的方法?
更新
根据到目前为止提供的答案,以下是结果:
一个二个一个一个
6条答案
按热度按时间irtuqstp1#
也可能:
输出:
w41d8nur2#
您可以用途:
iq0todco3#
您可以用途:
3
在col 1中,那么简单的df = df.drop(idx)
就足够了。*输出:
计时比较
Dataframe 大小从8到33 M行。所有答案的时间都是相似的,除了Chrysophylaxs的时间更快(rhug 123和Corralian/LaurentB的时间分别对于大/小 Dataframe 更慢)。
0ve6wy6x4#
下面是另一个解决方案:
输出:
r6vfmomb5#
qqrboqgw6#
编辑:
筛选最后一个
3
的索引并将其删除:如果可能,始终存在值
3
,您可以找到索引并删除它:在numpy里也是这样:
计时非常相似: