代码之家  ›  专栏  ›  技术社区  ›  JAG2024

多级数据帧中的和列

  •  0
  • JAG2024  · 技术社区  · 8 年前

    我一直在研究堆栈溢出问题来解决这个问题,但还没有找到解决方案。

    我有一个数据帧 df 看起来是这样的:

                value
    pod         22          72          79          86         87          88   
    time_stamp                                          
    2016-10-03  10.160000   0.000000    0.000000    32.004001   5.334000    11.176000   
    2016-10-10  0.000000    0.000000    0.000000    2.032000    0.000000    0.000000    
    2016-10-17  16.002001   0.000000    8.636000    21.336001   1.778000    6.604000    
    2016-10-24  2.032000    6.604000    71.628004   19.050001   0.508000    2.540000    
    2016-10-31  3.556000    21.590000   0.000000    0.000000    2.032000    2.794000    
    2016-11-07  3.302000    10.160000   0.762000    0.254000    1.270000    2.540000    
    2016-11-14  27.686001   44.704001   22.606001   1.524000    26.670001   42.164001   
    2016-11-21  68.072001   56.896002   14.732000   8.128000    23.114001   63.500002   
    

    我这样做时的输出 df.head(5).to_dict()

    {('value', 22): {Timestamp('2016-10-03 00:00:00'): 10.159999966599999,
    Timestamp('2016-10-10 00:00:00'): 0.0,
    Timestamp('2016-10-17 00:00:00'): 16.0020005107,
    Timestamp('2016-10-24 00:00:00'): 2.0320000648500001, 
    Timestamp('2016-10-31 00:00:00'): 3.5560001134900006},
    ('value', 72): {Timestamp('2016-10-03 00:00:00'): 0.0,
    Timestamp('2016-10-10 00:00:00'): 0.0,
    Timestamp('2016-10-17 00:00:00'): 0.0,
    Timestamp('2016-10-24 00:00:00'): 6.6040000915499997,
    Timestamp('2016-10-31 00:00:00'): 21.589999973800001},
    ('value', 79): {Timestamp('2016-10-03 00:00:00'): 0.0,
    Timestamp('2016-10-10 00:00:00'): 0.0,
    Timestamp('2016-10-17 00:00:00'): 8.6360000968000001,
    Timestamp('2016-10-24 00:00:00'): 71.628004074100005,
    Timestamp('2016-10-31 00:00:00'): 0.0},
    

    我想按列分组并对所有值求和。我被卡住了,因为这似乎是一个多级索引。

    当我这么做的时候 s = df.sum(axis=1, level=[1]); s 它只删除第一行: value . 如何对列求和?

    输出可能只是一个简单的数据帧,对 价值 列,使其看起来像:

    pod    22    72    79...
    2016   100   120   110...
    2017   80    90    72...
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   cs95 abhishek58g    8 年前

    看来你需要 sum 沿0 坐标轴:

    df
    
                    value                   
                       22      72         79
    2016-10-03  10.160000   0.000   0.000000
    2016-10-10   0.000000   0.000   0.000000
    2016-10-17  16.002001   0.000   8.636000
    2016-10-24   2.032000   6.604  71.628004
    2016-10-31   3.556000  21.590   0.000000
    
    df.sum(axis=0).to_frame().T
    
           value                   
              22      72         79
    0  31.750001  28.194  80.264004
    

    groupby 在…上 index.year :

    df.groupby(df.index.year).sum()
    
              value                   
                 22      72         79
    2016  31.750001  28.194  80.264004