在熊猫中就位sort_values到底是什么意思?

Kar*_*cek 9 python sorting in-place pandas

也许这是一个非常幼稚的问题,但我陷入其中:pandas.Series有一个方法sort_values,可以选择是否“就地”执行。我已经用谷歌搜索了一段时间,但是我对此不太清楚。看来,除了我以外,所有人都知道这件事。谁能给我一些说明性的解释,这两种选择对于傻瓜有何不同……?

感谢您的协助。

Ale*_*nov 8

这里举个例子。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)
Run Code Online (Sandbox Code Playgroud)

在以下情况下,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)
Run Code Online (Sandbox Code Playgroud)


SSC*_*SSC 5

sort_values 文档中可以看出,该函数的返回值是一个系列。但是,它是一个新系列而不是原始系列。

例如:

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
Run Code Online (Sandbox Code Playgroud)

所以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
Run Code Online (Sandbox Code Playgroud)

它表明它们是同一个系列,并且不会返回新系列。