【问题标题】:How to sum all values with one index greater than X in MultiIndexed Datarfame, grouping on the other indices?如何对 MultiIndexed Datarfame 中一个索引大于 X 的所有值求和,对其他索引进行分组?
【发布时间】:2019-05-05 21:12:18
【问题描述】:

我正在尝试做与post 中描述的完全相同的事情,但使用的是 MultiIndexed Pandas DataFrame。我一直在尝试调整其他帖子的答案,以便它可以与我的 DataFrame 一起使用,但没有任何运气。

目前我有以下 DataFrame,其中 targetwtms 在索引中:

                percent
target  wt  ms  
g1      2   1   2
            2   5
            ... ...
            620 0.003
            630 0.005
... ... ... ... ... 
g9      8   1   4
            2   8
            ... ...
            470 0.005
            480 0.004

我需要将 ms 的范围限制为某个数字,例如 12,然后将 percent 列中的值相加,其中 ms>12 分组在索引 targetwt 上。

我想要的结果是这样的:

                percent
target  wt  ms  
g1      2   1   2
            2   5
            ... ...
            >12 5.4
... ... ... ... ... 
g9      8   1   4
            2   8
            ... ...
            >12 7.3

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe aggregate pandas-groupby


    【解决方案1】:

    首先按级别msget_level_values 创建布尔掩码,然后按标量进行比较。然后按boolean indexingsum 每前两个级别过滤行。它失去了ms的等级,所以加上assignset_index

    最后由concat 连接在一起,并通过~sort_index 过滤带有反转掩码的行:

    mask = df.index.get_level_values('ms') > 12
    df1 = df[mask].sum(level=[0,1]).assign(ms='>12').set_index('ms', append=True)
    
    df = pd.concat([df[~mask], df1]).sort_index()
    print (df)
                   percent
    target wt ms          
    g1     2  1      2.000
              2      5.000
              >12    0.008
    g9     8  1      4.000
              2      8.000
              >12    0.009
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多