微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 根据最新的列表和排序日期添加新列

我是使用python编写代码的初学者.

我使用Pandas和他的DataReader编写了这个简单的脚本来从yahoo finance检索多个股票结果:

import pandas as pd
from pandas.io.data import DataReader
from pandas import DataFrame

symbols_list = ['AAPL', 'TSLA', 'YHOO','GOOG', 'MSFT','GILD']

for ticker in symbols_list: 
r = DataReader(ticker, "yahoo", '2015-01-20')
cell= r[['Open','High','Low','Adj Close','Volume']]

print cell

使用此代码,我获得价格股票,其中包含我在“cell = r [[….”中指定的其他列的日期,如下所示:

                      Open    High     Low  Adj Close    Volume
         Date                                                   
         2015-01-20  107.84  108.97  106.50     108.72  49899900
         2015-01-21  108.95  111.06  108.27     109.55  48575900
         2015-01-22  110.26  112.47  109.72     112.40  53796400
         2015-01-23  112.30  113.75  111.53     112.98  46464800
         2015-01-26  113.74  114.36  112.80     113.10  55375900
                       Open    High     Low  Adj Close   Volume
         Date                                                  
         2015-01-20  193.87  194.12  187.04     191.93  4489400
         2015-01-21  189.55  198.68  189.51     196.57  4144000
         2015-01-22  197.00  203.24  195.20     201.62  4094100
         2015-01-23  200.29  203.50  198.33     201.29  3438600
         2015-01-26  201.83  208.62  201.05     206.55  3224500

我的问题是:如何在列中包含我在symbol_list中指定的代码
最后一件事:我怎样才能颠倒日期的顺序?我想让它显示最新的第一个(在我的例子中为2015-01-26).
下面我将向您展示我想要获取内容的示例(作为第一列的股票代号和倒置的日期顺序)

  TSLA 2015-01-26 201.83 208.62 201.05 206.55 3224500
  TSLA 2015-01-23 200.29 203.50 198.33 201.29 3438600
  TSLA 2015-01-22 197.00 203.24 195.20 201.62 4094100
  TSLA,2015-01-21 189.55 198.68 189.51 196.57 4144000
  TSLA 2015-01-20 193.87 194.12 187.04 191.93 4489400

  AAPL 2015-01-26 113.74 114.36 112.80 113.10 55375900
  AAPL 2015-01-23 112.30 113.75 111.53 112.98 46464800
  AAPL 2015-01-22 110.26 112.47 109.72 112.40 53796400
  AAPL 2015-01-21 108.95 111.06 108.27 109.55 48575900
  AAPL 2015-01-20 107.84 108.97 106.50 108.72 49899900

我尝试了一些在论坛中创建的东西,但没有一个给了我任何结果.
谢谢大家的考虑,希望有人能帮我解决这两个问题.

解决方法:

我想我理解你想要的东西,我会将每个df附加到一个列表并使用concat来制作一个df,对于每个df,我们可以为每个符号添加一个新列:

In [54]:

from pandas.io.data import DataReader
symbols_list = ['AAPL', 'TSLA', 'YHOO','GOOG', 'MSFT','GILD']

symbols=[]
for ticker in symbols_list: 
    r = DataReader(ticker, "yahoo", '2015-01-20')
    # add a symbol column
    r['Symbol'] = ticker
    symbols.append(r)
# concatenate all the dfs
df = pd.concat(symbols)
df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 30 entries, 2015-01-20 00:00:00 to 2015-01-26 00:00:00
Data columns (total 7 columns):
Open         30 non-null float64
High         30 non-null float64
Low          30 non-null float64
Close        30 non-null float64
Volume       30 non-null int64
Adj Close    30 non-null float64
Symbol       30 non-null object
dtypes: float64(5), int64(1), object(1)
memory usage: 1.9+ KB
In [55]:

df
Out[55]:
              Open    High     Low   Close    Volume  Adj Close Symbol
Date                                                                  
2015-01-20  107.84  108.97  106.50  108.72  49899900     108.72   AAPL
2015-01-21  108.95  111.06  108.27  109.55  48575900     109.55   AAPL
2015-01-22  110.26  112.47  109.72  112.40  53796400     112.40   AAPL
2015-01-23  112.30  113.75  111.53  112.98  46464800     112.98   AAPL
2015-01-26  113.74  114.36  112.80  113.10  55375900     113.10   AAPL
2015-01-20  193.87  194.12  187.04  191.93   4503200     191.93   TSLA
2015-01-21  189.55  198.68  189.51  196.57   4153000     196.57   TSLA
2015-01-22  197.00  203.24  195.20  201.62   4094100     201.62   TSLA
2015-01-23  200.29  203.50  198.33  201.29   3438600     201.29   TSLA
2015-01-26  201.83  208.62  201.05  206.55   3224500     206.55   TSLA
2015-01-20   46.79   47.89   46.77   47.63  15845900      47.63   YHOO
2015-01-21   47.60   48.38   47.32   48.18  16305100      48.18   YHOO
2015-01-22   48.43   49.08   48.01   48.89  12647400      48.89   YHOO
2015-01-23   48.74   49.23   48.63   48.95  14206100      48.95   YHOO
2015-01-26   49.57   49.79   49.07   49.44  18928700      49.44   YHOO
2015-01-20  511.00  512.50  506.02  506.90   2221800     506.90   GOOG
2015-01-21  507.25  519.28  506.20  518.04   2262500     518.04   GOOG
2015-01-22  521.48  536.33  519.70  534.39   2653600     534.39   GOOG
2015-01-23  535.59  542.17  533.00  539.95   2266800     539.95   GOOG
2015-01-26  538.53  539.00  529.67  535.21   1532400     535.21   GOOG
2015-01-20   46.30   46.65   45.57   46.39  36161900      46.39   MSFT
2015-01-21   45.94   46.14   45.48   45.92  39081100      45.92   MSFT
2015-01-22   46.38   47.14   46.08   47.13  35898000      47.13   MSFT
2015-01-23   47.36   47.39   46.80   47.18  26211600      47.18   MSFT
2015-01-26   47.00   47.13   46.24   47.01  39577800      47.01   MSFT
2015-01-20  101.14  104.05  100.15  103.78  18838100     103.78   GILD
2015-01-21  103.04  105.07  102.57  103.58  12312500     103.58   GILD
2015-01-22  104.14  105.18  101.56  105.14  12963100     105.14   GILD
2015-01-23  104.40  106.11  103.80  105.54   9566700     105.54   GILD
2015-01-26  104.87  107.77  104.87  107.11  10254600     107.11   GILD

要求调用sort并传递ascending = False:

In [56]:

df.sort(ascending=False)
Out[56]:
              Open    High     Low   Close    Volume  Adj Close Symbol
Date                                                                  
2015-01-26  104.87  107.77  104.87  107.11  10254600     107.11   GILD
2015-01-26  201.83  208.62  201.05  206.55   3224500     206.55   TSLA
2015-01-26  538.53  539.00  529.67  535.21   1532400     535.21   GOOG
2015-01-26   49.57   49.79   49.07   49.44  18928700      49.44   YHOO
2015-01-26   47.00   47.13   46.24   47.01  39577800      47.01   MSFT
2015-01-26  113.74  114.36  112.80  113.10  55375900     113.10   AAPL
2015-01-23  104.40  106.11  103.80  105.54   9566700     105.54   GILD
2015-01-23   47.36   47.39   46.80   47.18  26211600      47.18   MSFT
2015-01-23  200.29  203.50  198.33  201.29   3438600     201.29   TSLA
2015-01-23  535.59  542.17  533.00  539.95   2266800     539.95   GOOG
2015-01-23   48.74   49.23   48.63   48.95  14206100      48.95   YHOO
2015-01-23  112.30  113.75  111.53  112.98  46464800     112.98   AAPL
2015-01-22  521.48  536.33  519.70  534.39   2653600     534.39   GOOG
2015-01-22   46.38   47.14   46.08   47.13  35898000      47.13   MSFT
2015-01-22  110.26  112.47  109.72  112.40  53796400     112.40   AAPL
2015-01-22   48.43   49.08   48.01   48.89  12647400      48.89   YHOO
2015-01-22  104.14  105.18  101.56  105.14  12963100     105.14   GILD
2015-01-22  197.00  203.24  195.20  201.62   4094100     201.62   TSLA
2015-01-21  507.25  519.28  506.20  518.04   2262500     518.04   GOOG
2015-01-21  189.55  198.68  189.51  196.57   4153000     196.57   TSLA
2015-01-21   47.60   48.38   47.32   48.18  16305100      48.18   YHOO
2015-01-21  103.04  105.07  102.57  103.58  12312500     103.58   GILD
2015-01-21   45.94   46.14   45.48   45.92  39081100      45.92   MSFT
2015-01-21  108.95  111.06  108.27  109.55  48575900     109.55   AAPL
2015-01-20  101.14  104.05  100.15  103.78  18838100     103.78   GILD
2015-01-20  107.84  108.97  106.50  108.72  49899900     108.72   AAPL
2015-01-20   46.30   46.65   45.57   46.39  36161900      46.39   MSFT
2015-01-20   46.79   47.89   46.77   47.63  15845900      47.63   YHOO
2015-01-20  193.87  194.12  187.04  191.93   4503200     191.93   TSLA
2015-01-20  511.00  512.50  506.02  506.90   2221800     506.90   GOOG

更新

如果要保留股票代码分组,然后按日期排序,则需要以下内容.在这里,我必须重置索引,以便’Date’再次成为常规列,然后我传递一个列表,它将按顺序处理,最后我必须再次设置索引:

In [44]:

df.reset_index().sort(['Symbol', 'Date'], ascending=False).set_index('Date')
Out[44]:
              Open    High     Low   Close     Volume  Adj Close Symbol
Date                                                                   
2015-01-27   49.14   49.28   47.66   47.99   44813600      47.99   YHOO
2015-01-26   49.57   49.79   49.07   49.44   18928700      49.44   YHOO
2015-01-23   48.74   49.23   48.63   48.95   14206100      48.95   YHOO
2015-01-22   48.43   49.08   48.01   48.89   12647400      48.89   YHOO
2015-01-21   47.60   48.38   47.32   48.18   16305100      48.18   YHOO
2015-01-20   46.79   47.89   46.77   47.63   15845900      47.63   YHOO
2015-01-27  204.42  208.03  203.30  205.98    2777700     205.98   TSLA
2015-01-26  201.83  208.62  201.05  206.55    3224500     206.55   TSLA
2015-01-23  200.29  203.50  198.33  201.29    3438600     201.29   TSLA
2015-01-22  197.00  203.24  195.20  201.62    4094100     201.62   TSLA
2015-01-21  189.55  198.68  189.51  196.57    4153000     196.57   TSLA
2015-01-20  193.87  194.12  187.04  191.93    4503200     191.93   TSLA
2015-01-27   42.95   43.20   42.11   42.66  169112700      42.66   MSFT
2015-01-26   47.00   47.13   46.24   47.01   42525500      47.01   MSFT
2015-01-23   47.36   47.39   46.80   47.18   26211600      47.18   MSFT
2015-01-22   46.38   47.14   46.08   47.13   35898000      47.13   MSFT
2015-01-21   45.94   46.14   45.48   45.92   39081100      45.92   MSFT
2015-01-20   46.30   46.65   45.57   46.39   36161900      46.39   MSFT
2015-01-27  529.97  530.70  518.19  518.63    1897300     518.63   GOOG
2015-01-26  538.53  539.00  529.67  535.21    1532400     535.21   GOOG
2015-01-23  535.59  542.17  533.00  539.95    2266800     539.95   GOOG
2015-01-22  521.48  536.33  519.70  534.39    2653600     534.39   GOOG
2015-01-21  507.25  519.28  506.20  518.04    2262500     518.04   GOOG
2015-01-20  511.00  512.50  506.02  506.90    2221800     506.90   GOOG
2015-01-27  105.94  107.02  104.86  105.03   10334500     105.03   GILD
2015-01-26  104.87  107.77  104.87  107.11   10254600     107.11   GILD
2015-01-23  104.40  106.11  103.80  105.54    9566700     105.54   GILD
2015-01-22  104.14  105.18  101.56  105.14   12963100     105.14   GILD
2015-01-21  103.04  105.07  102.57  103.58   12312500     103.58   GILD
2015-01-20  101.14  104.05  100.15  103.78   18838100     103.78   GILD
2015-01-27  112.42  112.48  109.03  109.14   91929200     109.14   AAPL
2015-01-26  113.74  114.36  112.80  113.10   55615000     113.10   AAPL
2015-01-23  112.30  113.75  111.53  112.98   46464800     112.98   AAPL
2015-01-22  110.26  112.47  109.72  112.40   53796400     112.40   AAPL
2015-01-21  108.95  111.06  108.27  109.55   48575900     109.55   AAPL
2015-01-20  107.84  108.97  106.50  108.72   49899900     108.72   AAPL

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐