【问题标题】:Make a grouped column by sum of another column with pandas通过与熊猫的另一列的总和创建一个分组列
【发布时间】:2020-11-01 04:14:17
【问题描述】:

我有这个数据集:

+===+=======+======+=======+=======+
|   | Group | Cost | Name1 | Name2 |
+===+=======+======+=======+=======+
| 0 | G1    | 1574 | N1A   | N2A   |
+---+-------+------+-------+-------+
| 1 | G2    | 1322 | N1B   | N2B   |
+---+-------+------+-------+-------+
| 2 | G3    | 1188 | N1C   | N2C   |
+---+-------+------+-------+-------+
| 3 | G3    |  942 | N1D   | N2D   |
+---+-------+------+-------+-------+
| 4 | G4    |  838 | N1E   | N2E   |
+---+-------+------+-------+-------+
| 5 | G5    |    5 | N1F   | N2F   |
+---+-------+------+-------+-------+
| 6 | G5    |    4 | N1F   | N2G   |
+---+-------+------+-------+-------+
| 7 | G5    |    3 | N1G   | N2H   |
+---+-------+------+-------+-------+

现在我想按“组”进行分组,并添加一个分组列,其中包含每个组的“成本”列的总和。不知道怎么解释,所以这是预期的结果:

+===+=======+======+======+=======+=======+
|   | Group | Sum  | Cost | Name1 | Name2 |
+===+=======+======+======+=======+=======+
| 0 | G1    | 1574 | 1574 | N1A   | N2A   |
+---+-------+------+------+-------+-------+
| 1 | G2    | 1322 | 1322 | N1B   | N2B   |
+---+-------+------+------+-------+-------+
| 2 | G3    | 2130 | 1188 | N1C   | N2C   |
|   |       |      +------+-------+-------+
|   |       |      |  942 | N1D   | N2D   |
+---+-------+------+------+-------+-------+
| 3 | G4    |  838 |  838 | N1E   | N2E   |
+---+-------+------+------+-------+-------+
| 4 | G5    |   12 |    5 | N1F   | N2F   |
|   |       |      +------+-------+-------+
|   |       |      |    4 | N1F   | N2G   |
|   |       |      +------+-------+-------+
|   |       |      |    3 | N1G   | N2H   |
+---+-------+------+------+-------+-------+

如何使用 pandas 实现这一目标?这甚至可能吗?对不起,我对这些东西不熟悉

【问题讨论】:

  • Pandas 没有 Excel 中的merged cells 概念。您可以使用 MultiIndex 来获得视觉效果。

标签: python pandas pandas-groupby


【解决方案1】:

GroupBy.transformsum 一起使用,然后通过DataFrame.set_index 创建MultiIndex,但MulitIndex 中的'missing' 值不会显示:

df['Sum'] = df.groupby('Group')['Cost'].transform('sum')
df = df.set_index(['Group','Sum','Cost'])

或者:

df1 = (df.assign(Sum = df.groupby('Group')['Cost'].transform('sum'))
         .set_index(['Group','Sum','Cost']))

【讨论】:

    猜你喜欢
    • 2017-09-17
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    相关资源
    最近更新 更多