pandas 如何在“groupby”期间/之后添加多行值?

y0u0uwnf  于 2023-01-07  发布在  其他
关注(0)|答案(1)|浏览(145)

我有一个作业数据集,其中包含了学生在各个模块中按学术组排序的成绩,在作业中,我使用了以下代码来获取输出,然后将其硬编码到一个表中:
第一个月

是否有方法可以将某些行组合/合并在一起以增加它们的值?
例如:
A(每个学术组的A和A+值的组合,例如,A组将是28,而不是7和21)
如此等等...

zbdgwd5y

zbdgwd5y1#

更新

>>> df.unstack(level=0).groupby(df.index.levels[1].map(mapping)).sum()

Academic Group  Grp A  Grp B  Grp C  Grp D  Grp E
Math.SemGrade                                    
A                  43     49     93     82     39
B                  24     69     65     59     57
C                  20      8      5     23     13

输入数据:

Academic Group  Math.SemGrade
Grp A           A                13
                A+               17
                AD                6
                B                 1
                B+                6
                C                 9
                C+                0
                D                 9
                D+                6
                F                20
Grp B           A                 6
                A+                8
                AD               19
                B                 6
                B+               10
                C                24
                C+                5
                D                11
                D+               29
                F                 8
Grp C           A                22
                A+               27
                AD               16
                B                14
                B+               14
                C                26
                C+               14
                D                 0
                D+               25
                F                 5
Grp D           A                29
                A+               23
                AD                2
                B                11
                B+               17
                C                 1
                C+               27
                D                 3
                D+               28
                F                23
Grp E           A                 2
                A+                9
                AD                4
                B                 9
                B+               15
                C                18
                C+               10
                D                 5
                D+               24
                F                13
dtype: int64

旧答案

如果要按首字母分组(A -〉A,A+ -〉A,...),可以用途:

>>> (df.groupby(df['Maths Semester Grades'].str[0])
       .sum(numeric_only=True).reset_index())

  Maths Semester Grades  Grp A  Grp B  Grp C  Grp D  Grp E
0                     A     36     33     65     54     15
1                     B      7     16     28     28     24
2                     C      9     29     40     28     28
3                     D     15     40     25     31     29
4                     F     20      8      5     23     13

如果你想控制这些组,使用一个Map字典:

mapping = {'A': 'A', 'A+': 'A', 'AD': 'A', 'B': 'A', 'B+': 'A',
           'C': 'B', 'C+': 'B', 'D': 'B', 'D+': 'B',
           'E': 'C', 'F': 'C'}

>>> (df.groupby(df['Maths Semester Grades'].map(mapping))
       .sum(numeric_only=True).reset_index()

  Maths Semester Grades  Grp A  Grp B  Grp C  Grp D  Grp E
0                     A     43     49     93     82     39
1                     B     24     69     65     59     57
2                     C     20      8      5     23     13

输入 Dataframe :

>>> df
  Maths Semester Grades  Grp A  Grp B  Grp C  Grp D  Grp E
0                     A     13      6     22     29      2
1                    A+     17      8     27     23      9
2                    AD      6     19     16      2      4
3                     B      1      6     14     11      9
4                    B+      6     10     14     17     15
5                     C      9     24     26      1     18
6                    C+      0      5     14     27     10
7                     D      9     11      0      3      5
8                    D+      6     29     25     28     24
9                     F     20      8      5     23     13

相关问题