Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在熊猫图书馆按天求和?_Python_Pandas_Dictionary - Fatal编程技术网

Python 如何在熊猫图书馆按天求和?

Python 如何在熊猫图书馆按天求和?,python,pandas,dictionary,Python,Pandas,Dictionary,我创建了以下词典: for k, er in dicio.items(): #dicio[k]['Return %'] = er.iloc[:, 0].pct_change(-1)*100 dicio[k]['Day'] = er.index.day dicio {'WDOFUT': WDOFUT Day Data 2020-09-11 5325.0 11 2020-09-10 5325.0 1

我创建了以下词典:

for k, er in dicio.items():
    #dicio[k]['Return %'] = er.iloc[:, 0].pct_change(-1)*100
    dicio[k]['Day'] = er.index.day
dicio

 {'WDOFUT':             WDOFUT  Day
 Data                   
 2020-09-11  5325.0   11
 2020-09-10  5325.0   10
 2020-09-09  5312.5    9
 2020-09-08  5366.0    8
 2020-09-04  5303.0    4
 ...            ...  ...
 1994-07-08     NaN    8
 1994-07-07     NaN    7
 1994-07-06     NaN    6
 1994-07-05     NaN    5
 1994-07-04     NaN    4
 
 [6482 rows x 2 columns],
 'WEGE3':             WEGE3  Day
 Data                  
 2020-09-11  62.42   11
 2020-09-10  62.42   10
 2020-09-09  64.93    9
 2020-09-08  63.00    8
 2020-09-04  64.49    4
 ...           ...  ...
 1994-07-08    NaN    8
 1994-07-07    NaN    7
 1994-07-06    NaN    6
 1994-07-05    NaN    5
 1994-07-04    NaN    4
 
 [6482 rows x 2 columns],
 'YDUQ3':             YDUQ3  Day
 Data                  
 2020-09-11  27.31   11
 2020-09-10  27.31   10
 2020-09-09  27.99    9
 2020-09-08  28.75    8
 2020-09-04  27.78    4
 ...           ...  ...
 1994-07-08    NaN    8
 1994-07-07    NaN    7
 1994-07-06    NaN    6
 1994-07-05    NaN    5
 1994-07-04    NaN    4
 
 [6482 rows x 2 columns]}
我可以按天分组,但它只取字典的最后一项(YDUQ3):

我可以看到下面显示的每日分组词典,但仅限于最后一项(我需要全部):

问题:

  • 如何显示词典中的3项? (dicio[k]只使用了一个键(最后一个键))

  • 我想把所有同一天的收益加起来

    • 如果跨度为10年,则将有~120天01、~120天02,依此类推

    • 每个符号都有一个31 x 120的字典,我们可以从中选择累积收益的最高日和最低日

    • 然后,我想展示整个股票投资组合的最高/最低回报及其发生的天数


从你问题的细节来看,我不确定,但从你问题的框架来看,似乎每个股票都有一个单独的数据框架。如果是这种情况,您可以尝试将它们全部合并到一个数据帧中。我用这个例子来说明我的意思

  import pandas as pd
  import numpy as np
  dicio =  {
      'WDOFUT': [              
   [pd.Timestamp(year=2020, month= 9, day= 11),  5325.0, 11],
   [pd.Timestamp(year=2020, month= 9, day= 10),  5325.0, 10],
   [pd.Timestamp(year=2020, month= 9, day= 9),  5312.5, 9],
   [pd.Timestamp(year=2020, month= 9, day= 8),  5366.0, 8],
   [pd.Timestamp(year=2020, month= 9, day= 4),  5303.0, 4],
   [pd.Timestamp(year=1994, month= 7, day= 8),  np.nan,  8],
   [pd.Timestamp(year=1994, month= 7, day= 7),  np.nan, 7],
   [pd.Timestamp(year=1994, month= 7, day= 6),  np.nan, 6],
   [pd.Timestamp(year=1994, month= 7, day= 5),  np.nan,  5],
   [pd.Timestamp(year=1994, month= 7, day= 4),  np.nan, 4],],
      'WEGE3': [
   [pd.Timestamp(year=2020, month=9, day= 11),  62.42, 11],
   [pd.Timestamp(year=2020, month=9, day= 10),  62.42, 10],
   [pd.Timestamp(year=2020, month=9, day= 9),  64.93,  9],
   [pd.Timestamp(year=2020, month=9, day= 8), 63.00,  8],
   [pd.Timestamp(year=2020, month=9, day= 4),  64.49,  4],
   [pd.Timestamp(year=1994, month=7, day= 8), np.nan,  8],
   [pd.Timestamp(year=1994, month=7, day= 7), np.nan,  7],
   [pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
   [pd.Timestamp(year=1994, month=7, day=5), np.nan,  5],
   [pd.Timestamp(year=1994, month=7, day=4), np.nan,  4]
   ],
      'YDUQ3':[                  
   [pd.Timestamp(year=2020, month=9, day= 11),  27.31,   11],
   [pd.Timestamp(year=2020, month=9, day= 10),  27.31,    10],
   [pd.Timestamp(year=2020, month=9, day= 9),  27.99,    9],
   [pd.Timestamp(year=2020, month=9, day= 8),  28.75,    8],
   [pd.Timestamp(year=2020, month=9, day= 4),  27.78,   4],
   [pd.Timestamp(year=1994, month=7, day= 8), np.nan,   8],
   [pd.Timestamp(year=1994, month=7, day= 7), np.nan,  7],
   [pd.Timestamp(year=1994, month=7, day= 6), np.nan,   6],
   [pd.Timestamp(year=1994, month=7, day= 5), np.nan,  5],
   [pd.Timestamp(year=1994, month=7, day= 4), np.nan,  4]],
   }
   data_list = []
   for stk in dicio.keys():
      for itm in dicio[stk]:
          dline =[stk]
          dline.extend(itm)
          data_list.append(dline)  
   df = pd.DataFrame(data= data_list, columns= ['Stock','Date', 'Return','Day'])
   grouped_by_day = df.groupby(by=['Day','Stock']).mean()
    
按天分组的打印输出产生:

             
Day Stock   Return
4   WDOFUT  5303.00
    WEGE3   64.49
    YDUQ3   27.78
5   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
6   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
7   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
8   WDOFUT  5366.00
    WEGE3   63.00
    YDUQ3   28.75
9   WDOFUT  5312.50
    WEGE3   64.93
   YDUQ3    27.99
10  WDOFUT  5325.00
    WEGE3   62.42
    YDUQ3   27.31
11  WDOFUT  5325.00
    WEGE3   62.42
    YDUQ3   27.31

我认为你应该能够从这个小组中获得你想要的结果。

对不起,这不是我想要的。你想要达到的是什么?您期望的结果与建议的解决方案有何不同?将有多个股票符号,比如从2010年到2020年。我计算每个符号每天的每日回报。然后,对于每个股票符号,将有~120天01、~120天02,依此类推。我想知道每月每天的累积回报率。假设WEGE3股票在第03天的31天中累积回报最高,在第19天的累积回报最低。如果需要,可以问更多。你可以参考这篇文章:。。。。。。。在这里,特伦顿·麦金尼先生利用报税表得出了结果,而没有考虑当天的情况。我想为每个符号找出最好和最坏的日子。
  import pandas as pd
  import numpy as np
  dicio =  {
      'WDOFUT': [              
   [pd.Timestamp(year=2020, month= 9, day= 11),  5325.0, 11],
   [pd.Timestamp(year=2020, month= 9, day= 10),  5325.0, 10],
   [pd.Timestamp(year=2020, month= 9, day= 9),  5312.5, 9],
   [pd.Timestamp(year=2020, month= 9, day= 8),  5366.0, 8],
   [pd.Timestamp(year=2020, month= 9, day= 4),  5303.0, 4],
   [pd.Timestamp(year=1994, month= 7, day= 8),  np.nan,  8],
   [pd.Timestamp(year=1994, month= 7, day= 7),  np.nan, 7],
   [pd.Timestamp(year=1994, month= 7, day= 6),  np.nan, 6],
   [pd.Timestamp(year=1994, month= 7, day= 5),  np.nan,  5],
   [pd.Timestamp(year=1994, month= 7, day= 4),  np.nan, 4],],
      'WEGE3': [
   [pd.Timestamp(year=2020, month=9, day= 11),  62.42, 11],
   [pd.Timestamp(year=2020, month=9, day= 10),  62.42, 10],
   [pd.Timestamp(year=2020, month=9, day= 9),  64.93,  9],
   [pd.Timestamp(year=2020, month=9, day= 8), 63.00,  8],
   [pd.Timestamp(year=2020, month=9, day= 4),  64.49,  4],
   [pd.Timestamp(year=1994, month=7, day= 8), np.nan,  8],
   [pd.Timestamp(year=1994, month=7, day= 7), np.nan,  7],
   [pd.Timestamp(year=1994, month=7, day= 6), np.nan, 6],
   [pd.Timestamp(year=1994, month=7, day=5), np.nan,  5],
   [pd.Timestamp(year=1994, month=7, day=4), np.nan,  4]
   ],
      'YDUQ3':[                  
   [pd.Timestamp(year=2020, month=9, day= 11),  27.31,   11],
   [pd.Timestamp(year=2020, month=9, day= 10),  27.31,    10],
   [pd.Timestamp(year=2020, month=9, day= 9),  27.99,    9],
   [pd.Timestamp(year=2020, month=9, day= 8),  28.75,    8],
   [pd.Timestamp(year=2020, month=9, day= 4),  27.78,   4],
   [pd.Timestamp(year=1994, month=7, day= 8), np.nan,   8],
   [pd.Timestamp(year=1994, month=7, day= 7), np.nan,  7],
   [pd.Timestamp(year=1994, month=7, day= 6), np.nan,   6],
   [pd.Timestamp(year=1994, month=7, day= 5), np.nan,  5],
   [pd.Timestamp(year=1994, month=7, day= 4), np.nan,  4]],
   }
   data_list = []
   for stk in dicio.keys():
      for itm in dicio[stk]:
          dline =[stk]
          dline.extend(itm)
          data_list.append(dline)  
   df = pd.DataFrame(data= data_list, columns= ['Stock','Date', 'Return','Day'])
   grouped_by_day = df.groupby(by=['Day','Stock']).mean()
    
             
Day Stock   Return
4   WDOFUT  5303.00
    WEGE3   64.49
    YDUQ3   27.78
5   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
6   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
7   WDOFUT  NaN
    WEGE3   NaN
    YDUQ3   NaN
8   WDOFUT  5366.00
    WEGE3   63.00
    YDUQ3   28.75
9   WDOFUT  5312.50
    WEGE3   64.93
   YDUQ3    27.99
10  WDOFUT  5325.00
    WEGE3   62.42
    YDUQ3   27.31
11  WDOFUT  5325.00
    WEGE3   62.42
    YDUQ3   27.31