首页 > 解决方案 > Pandas 多索引

问题描述

考虑以下数据框。

    In [3]: idx = pd.MultiIndex.from_product([['2021-02-10', '2021-02-11', '2021-02-12'],
   ...:                                   ['Orders', 'GMV', 'AOV']],
   ...:                                  names=['Date', 'Metric'])
   ...: col = ['Yesterday', 'Yesterday-1', 'Difference', 'Difference-1']
   ...: 
   ...: df = pd.DataFrame('-', idx, col)
   ...: print(df)
                  Yesterday Yesterday-1 Difference Difference-1
Date       Metric
2021-02-10 Orders         -           -          -            -
           GMV            -           -          -            -
           AOV            -           -          -            -
2021-02-11 Orders         -           -          -            -
           GMV            -           -          -            -
           AOV            -           -          -            -
2021-02-12 Orders         -           -          -            -
           GMV            -           -          -            -
           AOV            -           -          -            -

例如,我在YesterdayYesterday-1列 中有一些值, Difference列需要采用如下格式:

df.loc['2021-02-11', 'Difference'] = df.loc['2021-02-11', 'Orders] - df.loc['2021-02-10', 'Orders]

什么实际上不起作用,我需要对每个指标都一样,我该怎么做?我是否创建了一个for 循环并使用iloc并遍历每个指标以填充差异列?谢谢!

标签: pythonpandasmulti-index

解决方案


为了清楚起见,您应该编辑您的问题,但我认为您需要:

df['Difference'] = df['Yesterday'] - df.groupby(level=1)['Yesterday'].shift()


推荐阅读