【问题标题】:Sort value and calculate difference for multiindex pandas dataframe对多索引熊猫数据框的值进行排序并计算差异
【发布时间】:2022-01-20 02:59:53
【问题描述】:

我有一个像这样的熊猫数据框,其中place1place2 是索引,我想通过data 值对索引place2 进行排序,而不破坏索引place1 的顺序,即对于每个 place1place2 列变为 a, c, b。有没有办法做到这一点?

place1 place2 data
 sss     a    100
         b    300
         c    200
 ses     a    400
         b    600
         c    500
  ...   ...   ... 

我还想为每个place1计算place2 == bplace2 == a之间的data差异,即dataframe变成了

place1 place2 data diff
 sss     a    100  200
         b    300
         c    200
 ses     a    400  200
         b    600
         c    500
  ...   ...   ...  ...

有没有一种有效的方法来计算这样的差异?提前致谢!

【问题讨论】:

    标签: python pandas dataframe multi-index


    【解决方案1】:

    你可以.groupby()然后计算每组的diff:

    groups = df.groupby(level=0, group_keys=False, sort=False)
    df['diff'] = groups.transform(lambda x: x.xs('b', level='place2').iloc[0] - x.xs('a', level='place2').iloc[0])
    

    它将值添加到组的每一行 - 但如果需要,您可以在之后删除“重复项”。

    >>> df
                   data  diff
    place1 place2            
    sss    a        100   200
           b        300   200
           c        200   200
    ses    a        400   200
           b        600   200
           c        500   200
    

    然后您可以对每个组中的data 列进行排序

    >>> groups.apply(lambda x: x.sort_values('data'))
                   data  diff
    place1 place2            
    sss    a        100   200
           c        200   200
           b        300   200
    ses    a        400   200
           c        500   200
           b        600   200
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2013-12-15
      • 1970-01-01
      • 2020-03-01
      • 2018-02-07
      • 2018-05-10
      • 2021-07-03
      相关资源
      最近更新 更多