获取DataframeGroupBy对象中的移位数据

时间:2019-12-04 20:52:04

标签: pandas dataframe pandas-groupby

我有个事件 DataframeGroupBy对象,其中包含3个组。

90
Date         Open     High      Low    Close 
1997-10-28   960.46   983.12   855.27   921.85
1998-09-21  1084.19  1084.19   939.98  1023.89
1998-10-15  1023.89  1066.11   923.32  1047.49
2000-10-16  1447.67  1461.63  1327.06  1374.62
2000-11-09  1379.42  1438.44  1306.06  1400.13
2000-12-29  1374.45  1388.81  1254.19  1320.28
2001-03-15  1302.13  1307.14  1155.06  1173.56
2001-10-03  1083.35  1096.95   944.07  1071.51
2002-08-27   884.66   965.00   833.44   934.82
2007-08-15  1534.10  1547.02  1404.36  1406.70
2007-11-23  1531.02  1552.76  1415.64  1440.70
2008-02-07  1416.25  1416.25  1270.05  1336.91
2008-07-08  1339.87  1366.59  1240.68  1273.70
2009-01-26   903.25   943.85   804.30   836.57
2010-05-19  1217.07  1219.80  1065.79  1115.05
2011-10-05  1153.50  1220.39  1074.77  1144.03
2011-10-31  1144.11  1292.66  1134.95  1253.30
2013-10-30  1687.15  1775.22  1646.47  1763.31
2015-02-20  2032.34  2110.61  1980.90  2110.30
2015-10-06  1951.45  2020.86  1871.91  1979.92
2016-02-09  1916.68  1947.20  1812.29  1852.21
2016-07-08  2077.60  2131.71  1991.68  2129.90
2018-05-21  2651.65  2742.10  2594.62  2733.01
2019-02-21  2644.89  2789.88  2631.05  2774.88
2019-03-19  2780.67  2852.42  2722.27  2832.57
2019-10-31  2920.40  3050.10  2892.66  3037.56

95
Date        Open     High      Low    Close                                                                                                                      
2000-04-21  1509.15  1527.13  1339.33  1434.54
2002-08-01   976.98   979.63   775.68   884.66
2008-09-22  1281.66  1303.04  1133.50  1207.09
2008-11-11   946.43  1007.37   845.27   898.95
2008-12-05   898.95   916.88   741.02   876.07
2014-10-17  1983.34  1999.79  1820.66  1886.76
2014-11-12  1885.62  2041.28  1882.30  2038.25
2016-01-14  2023.15  2081.56  1878.93  1921.84
2016-03-04  1857.10  2009.13  1810.10  1999.99
2018-04-25  2633.45  2717.49  2553.80  2639.40
2018-12-07  2737.90  2800.18  2621.53  2633.08
2019-06-03  2859.84  2892.15  2728.81  2744.45
2019-06-27  2762.64  2964.15  2762.64  2924.92
2019-08-16  2998.77  3027.98  2822.12  2888.68
2019-09-11  2913.48  3000.93  2834.97  3000.93
2019-10-07  3009.08  3021.99  2855.94  2938.79

98
Date        Open     High      Low    Close
2000-03-28  1387.09  1553.10  1346.46  1507.73
2008-10-16  1207.09  1221.15   839.80   946.43
2011-08-16  1343.80  1346.10  1101.54  1192.76
2015-09-10  2101.99  2103.47  1867.01  1952.29
2018-02-08  2798.96  2872.87  2580.56  2581.00
2018-03-06  2601.78  2789.15  2532.69  2728.12
2018-03-30  2710.18  2801.90  2585.89  2640.87
2018-10-18  2921.75  2939.86  2710.51  2768.78
2018-11-13  2775.66  2815.15  2603.54  2722.18
2019-01-02  2630.86  2685.44  2346.58  2510.03
2019-01-28  2491.92  2675.47  2443.96  2643.85

我还有从开始日期到结束日期的所有数据,作为 df 对象。

问题是如何在'n'天获取另一个具有DateTimeIndex偏移的DataframeGroupBy对象。

因此,该算法适用于每个组:

  1. 获取组的DateTimeIndex并在n天后将其转移。
  2. 使用已转换的DateTimeIndex从“基本”数据框中选择新数据
  3. 将结果打包到新的DataframeGroupBy对象中。

    # shit on 1 day
    n = 1
    for name in events.groups.keys():
        # get the index
        idx = events.groups[name]
        print(idx)
    
        idx = idx.shift(n, freq='b')
        new_data = df.reindex(idx)
        print(new_data)
    

我正在尝试解决这样的问题。可能不是最佳解决方案,但现在我仍然不知道如何将新数据分组到DataframeGroupBy中。

可以用优雅的方式做吗? 预先谢谢你!

0 个答案:

没有答案