我正在使用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)