如何访问groupby对象中的特定列?

2024-09-29 18:50:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个名为p\u assets\u df的数据帧,看起来像这样:

                      <close>      <high>    <low>      <open>  <vol>
<date>   <ticker>                                                    
20110101 AEDCAD        0.2707      0.2715   0.2707      0.2715      0
         AEDCHF        0.2545      0.2545   0.2545      0.2545      0
         AEDDKK        1.4950      1.5262   1.4950      1.5262      0
         AEDEUR        0.2006      0.2047   0.2006      0.2047      0
         AEDGBP        0.1747      0.1759   0.1747      0.1759      0
         AEDINR       12.1320     12.1320  12.1320     12.1320      0
         AEDJPY       22.1160     22.1550  22.1160     22.1550      0
         AEDNZD        0.3495      0.3514   0.3495      0.3514      0
         AEDPKR       23.3050     23.3170  23.3050     23.3170      0
20110102 AEDZAR        1.7914      1.8020   1.7864      1.8020      0
         ARSAUD        0.2476      0.2478   0.2424      0.2424      0
         ARSBRL        0.4181      0.4181   0.4114      0.4114      0
         ARSCAD        0.2512      0.2516   0.2475      0.2475      0
         ARSCHF        0.2360      0.2364   0.2310      0.2310      0
         ARSEUR        0.1894      0.1894   0.1852      0.1852      0
         ARSGBP        0.1625      0.1625   0.1589      0.1589      0
         ARSHKD        1.9653      1.9662   1.9280      1.9280      0
         ARSJPY       20.5260      20.5530  20.1270     20.1270      0

我正在尝试添加一个名为“滚动平均值”的新列,它使用列值来计算每个股票代码的移动平均值。这是一个多索引df,日期作为第一个索引,股票代码作为第二个索引。你知道吗

我试过这样做:

这是我试过的代码。你知道吗

    p_assets_df['Rolling_Average'] = 
    p_assets_df.groupby(level=0).rolling(window=26) 
    ['<close>'].mean().values

我还将level值设置为1和[0,1],没有任何更改。你知道吗

我遇到的问题是,滚动平均值只会在新列中返回NaN的值。对于window参数中提供的第一个x值,我希望是NaN,但不是列中的每个值。请注意,第一个指数从20110101到20111231,频率为日。 下面是tail()方法的输出。你知道吗

20111230 AEDCAD     0.2776   0.2780   0.2776   0.2780      0              NaN
         AEDCHF     0.2555   0.2559   0.2555   0.2559      0              NaN
         AEDDKK     1.5606   1.5637   1.5606   1.5620      0              NaN
         AEDEUR     0.2100   0.2103   0.2100   0.2101      0              NaN
         AEDGBP     0.1763   0.1766   0.1763   0.1766      0              NaN
         AEDINR    14.4260  14.5180  14.4020  14.4290      0              NaN
         AEDJPY    21.0730  21.1350  21.0730  21.1350      0              NaN
         AEDNZD     0.3519   0.3529   0.3519   0.3529      0              NaN
         AEDPKR    24.4340  24.4340  24.4210  24.4210      0              NaN
20111231 AEDCAD     0.2768   0.2768   0.2768   0.2768      0              NaN
         AEDCHF     0.2553   0.2553   0.2553   0.2553      0              NaN
         AEDDKK     1.5590   1.5590   1.5590   1.5590      0              NaN
         AEDEUR     0.2097   0.2097   0.2097   0.2097      0              NaN
         AEDGBP     0.1755   0.1755   0.1755   0.1755      0              NaN
         AEDINR    14.4260  14.4260  14.4260  14.4260      0              NaN
         AEDJPY    20.9620  20.9620  20.9620  20.9620      0              NaN
         AEDNZD     0.3493   0.3493   0.3493   0.3493      0              NaN
         AEDPKR    24.4480  24.4480  24.4480  24.4480      0              NaN

谢谢你的帮助。你知道吗


Tags: dfclosenan平均值股票代码assetsaedcadaedjpy
1条回答
网友
1楼 · 发布于 2024-09-29 18:50:43

我相信您需要level=1,为了正确对齐输出,请按第一级添加^{},然后用drop=True删除它,而不是.values

p_assets_df['Rolling_Average'] = (p_assets_df.groupby(level=1)
                                             .rolling(window=26)['<close>']
                                             .mean()
                                             .reset_index(level=0, drop=True))

window=2测试问题的样本数据:

p_assets_df['Rolling_Average'] = (p_assets_df.groupby(level=1)
                                             .rolling(window=2)['<close>']
                                             .mean()
                                             .reset_index(level=0, drop=True))

print (p_assets_df)
                   <close>   <high>    <low>   <open>  <vol>  Rolling_Average
<date>   <ticker>                                                            
20110101 AEDCAD     0.2707   0.2715   0.2707   0.2715      0              NaN
         AEDCHF     0.2545   0.2545   0.2545   0.2545      0              NaN
         AEDDKK     1.4950   1.5262   1.4950   1.5262      0              NaN
         AEDEUR     0.2006   0.2047   0.2006   0.2047      0              NaN
         AEDGBP     0.1747   0.1759   0.1747   0.1759      0              NaN
         AEDINR    12.1320  12.1320  12.1320  12.1320      0              NaN
         AEDJPY    22.1160  22.1550  22.1160  22.1550      0              NaN
         AEDNZD     0.3495   0.3514   0.3495   0.3514      0              NaN
         AEDPKR    23.3050  23.3170  23.3050  23.3170      0              NaN
20110102 AEDZAR     1.7914   1.8020   1.7864   1.8020      0              NaN
         ARSAUD     0.2476   0.2478   0.2424   0.2424      0              NaN
         ARSBRL     0.4181   0.4181   0.4114   0.4114      0              NaN
         ARSCAD     0.2512   0.2516   0.2475   0.2475      0              NaN
         ARSCHF     0.2360   0.2364   0.2310   0.2310      0              NaN
         ARSEUR     0.1894   0.1894   0.1852   0.1852      0              NaN
         ARSGBP     0.1625   0.1625   0.1589   0.1589      0              NaN
         ARSHKD     1.9653   1.9662   1.9280   1.9280      0              NaN
         ARSJPY    20.5260  20.5530  20.1270  20.1270      0              NaN
20111230 AEDCAD     0.2776   0.2780   0.2776   0.2780      0          0.27415
         AEDCHF     0.2555   0.2559   0.2555   0.2559      0          0.25500
         AEDDKK     1.5606   1.5637   1.5606   1.5620      0          1.52780
         AEDEUR     0.2100   0.2103   0.2100   0.2101      0          0.20530
         AEDGBP     0.1763   0.1766   0.1763   0.1766      0          0.17550
         AEDINR    14.4260  14.5180  14.4020  14.4290      0         13.27900
         AEDJPY    21.0730  21.1350  21.0730  21.1350      0         21.59450
         AEDNZD     0.3519   0.3529   0.3519   0.3529      0          0.35070
         AEDPKR    24.4340  24.4340  24.4210  24.4210      0         23.86950
20111231 AEDCAD     0.2768   0.2768   0.2768   0.2768      0          0.27720
         AEDCHF     0.2553   0.2553   0.2553   0.2553      0          0.25540
         AEDDKK     1.5590   1.5590   1.5590   1.5590      0          1.55980
         AEDEUR     0.2097   0.2097   0.2097   0.2097      0          0.20985
         AEDGBP     0.1755   0.1755   0.1755   0.1755      0          0.17590
         AEDINR    14.4260  14.4260  14.4260  14.4260      0         14.42600
         AEDJPY    20.9620  20.9620  20.9620  20.9620      0         21.01750
         AEDNZD     0.3493   0.3493   0.3493   0.3493      0          0.35060
         AEDPKR    24.4480  24.4480  24.4480  24.4480      0         24.44100

相关问题 更多 >

    热门问题