大熊猫的就地排序值究竟是什么意思?

时间:2017-01-21 07:26:37

标签: python sorting pandas in-place

也许这是一个非常天真的问题,但我坚持这一点:pandas.Series有一个方法sort_values,并且有一个选项可以做到这一点"到位"或不。我已经谷歌搜索了一段时间,但我不是很清楚。似乎这个东西被认为是除了我之外所有人都知道的。任何人都可以给我一些说明性的解释,这两个选项如何相互之间的傻瓜......?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

正如您可以从sort_values document读取的那样,该函数的返回值是一个系列。但是,它是一个新系列而不是原始系列。

例如:

import numpy as np
import pandas as pd

s = pd.Series(np.random.randn(5), index=['a', 'b', 'c', 'd', 'e'])
print(s)
a   -0.872271
b    0.294317
c   -0.017433
d   -1.375316
e    0.993197
dtype: float64

s_sorted = s.sort_values()

print(s_sorted)

d   -1.375316
a   -0.872271
c   -0.017433
b    0.294317
e    0.993197
dtype: float64

print(id(s_sorted))
127952880

print(id(s))
127724792

所以ss_sorted是不同的系列。 但是如果你使用inplace = True。

s.sort_values(inplace=True)
print(s)
d   -1.375316
a   -0.872271
c   -0.017433
b    0.294317
e    0.993197
dtype: float64

print(id(s))
127724792

它显示它们是同一系列,并且不会返回任何新系列。

答案 1 :(得分:2)

这是一个例子。 df1将保留已排序的数据框,df将保持不变

import pandas as pd
from datetime import datetime as dt
df = pd.DataFrame(data=[22,22,3],
                  index=[dt(2016, 11, 10, 0), dt(2016, 11, 10, 13), dt(2016, 11, 13, 5)],
                  columns=['foo'])

df1 = df.sort_values(by='foo')
print(df, df1)

在下面的情况中,df将保留已排序的值

import pandas as pd
from datetime import datetime as dt

df = pd.DataFrame(data=[22,22,3],
                  index=[dt(2016, 11, 10, 0), dt(2016, 11, 10, 13), dt(2016, 11, 13, 5)],
                  columns=['foo'])

df.sort_values(by='foo', inplace=True)
print(df)

答案 2 :(得分:1)

“ inplace = True”更像是物理排序,而“ inplace = False”更像是逻辑排序。物理排序是指根据某些键对存储在计算机中的数据集进行排序。逻辑排序意味着保存在计算机中的数据集仍以原始方式(输入/导入时)保存,并且排序仅在其索引上起作用。数据集具有一个或多个逻辑索引,但是物理索引是唯一的。