python - 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 - - - -
例如,我在Yesterday和Yesterday-1列 中有一些值, Difference列需要采用如下格式:
df.loc['2021-02-11', 'Difference'] = df.loc['2021-02-11', 'Orders] - df.loc['2021-02-10', 'Orders]
什么实际上不起作用,我需要对每个指标都一样,我该怎么做?我是否创建了一个for 循环并使用iloc并遍历每个指标以填充差异列?谢谢!
解决方案
为了清楚起见,您应该编辑您的问题,但我认为您需要:
df['Difference'] = df['Yesterday'] - df.groupby(level=1)['Yesterday'].shift()
推荐阅读
- python - 创建一个包含所有列组合的数据框并计算非 0 和 NaN 的行数
- java - Spring Boot自定义用户名和密码不起作用
- tensorflow2.0 - 类型错误:传递给“ConcatV2”操作的“值”的列表中的张量具有类型 [float32,float16],这些类型使用 tensorflow 混合精度并不完全匹配
- java - json验证以防止重复属性
- python-3.x - 快速排序程序 - 它给了我类型错误
- rust - 当权限被拒绝时如何锈蚀更新?
- html - 如何使用 prettier 处理 ">" 和 "{{" or ">" 和 "}}" 的换行符?
- c - 如何找到二维数组中所有列和行的总和
- android - 如何使用条件导航将 androidTest 添加到片段?
- javascript - 如何在 CRUD 表中实现过滤?