对熊猫中的列进行排序只是返回相同的未排序信息



我正在使用pandas_datareader来提取雅虎股票数据并计算百分比变化。现在,我想获取这些百分比变化值,并将它们从最低到最高排序,并将排序后的数据放在新列中。正在创建列,但值未排序,只是复制。

import pandas_datareader as pdr
Ticker = 'SQ'
result = pdr.get_data_yahoo(Ticker) 
result = result.drop(['Open','High','Low','Volume','Adj Close'], axis=1)
result['pct change'] = (result.pct_change(1,'pad'))*100
result['Sorted'] = result['pct change'].sort_values(inplace = False)

然而,输出的前几行看起来像这样

Close  pct change    Sorted
Date                                                   
2017-07-17  26.190001         NaN         NaN
2017-07-18  26.590000    1.527297    1.527297
2017-07-19  26.360001   -0.864983   -0.864983
2017-07-20  26.389999    0.113801    0.113801
2017-07-21  26.850000    1.743088    1.743088
2017-07-24  26.750000   -0.372439   -0.372439

我对编码很陌生,所以我假设这很简单,但我无法通过谷歌搜索找到任何有用的东西

我认为将排序值添加为同一数据帧中的列不一定有意义,因为数据帧上的索引是 DatetimeIndex - 现在排序的值不能正确对应于您的索引。

更好的解决方案是将排序值系列与数据帧分开保存。


话虽如此sort_values后看不到任何结果的原因是排序结果保留了原始数据帧索引。然后,当您将排序的序列添加为另一列时,排序值上的原始索引会将排序的值放回数据帧中的原始顺序。

所以你的问题正是因为熊猫知道你的排序值的原始索引。

要解决此问题,您可以在设置列之前reset_index排序的值。

result['Sorted'] = result['pct change'].sort_values().reset_index(drop=True)

最新更新