Pandas DataFrame中的条件筛选是否保留顺序?

4
例如,
df = pandas.DataFrame({'name':['a','b','c'], 'age':[10,20,30]})

  name  age
0    a   10
1    b   20
2    c   30

df[df['age'] > 10]

  name  age
1    b   20
2    c   30

我的问题是:Pandas是否确保索引顺序被保留?是否可能出现以下结果:

  name  age
2    c   30
1    b   20

谢谢

2个回答

5
是的,筛选保留了行的顺序(也保留了索引值)。
如果需要更改顺序,需要按列age进行排序:
df1 = df[df['age'] > 10].sort_values('age', ascending=False)
print (df1)
  name  age
2    c   30
1    b   20

谢谢,确实在索引上进行某种排序可以保持顺序。我的数据有些大,> 200G,我不确定排序的成本是否必要。 - adroot
@adroot - 嗯,那我就不明白你的问题了。因为如果 df[df['age'] > 10] 返回了索引 1,2,它便是保留元素顺序的。所以也许答案应该是 - “是的,过滤会保留顺序”。 - jezrael
1
谢谢。是的,我的问题与订单保留有关。@zipa给出了一个很好的例子。 - adroot
@adroot 请接受这个答案。这有助于人们更容易接受它。 - ashutosh singh

2

它保留数据顺序,不会自动按任何属性对数据进行排序。

这里你可以看到:

df = pd.DataFrame({'name':['a','b','c'], 'age':[30,20,10]}, index=[1,0,2])

df[df['age']>10]
#   age name
#1   30    a
#0   20    b

1
感谢您提供的启发性示例,让我确信顺序得到了保留。 - adroot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接