2

The input dataframe have

Name   Subject   IA1   IA2   IA3
Abc     DS       45     43    34
Abc     DMS      43     23    45
Abc     ADA      32     46    36
Bcd     BA       45     35    37 
Bcd     EAD      23     45    12
Bcd     DS       23     35    43
Cdf     EAD      34     33    23
Cdf     ADA      12     34    25

Expected output:

Name   Subject   IA1   IA2   IA3
Abc     DS       45     43    34
        DMS      43     23    45
        ADA      32     46    36

Bcd     BA       45     35    37 
        EAD      23     45    12
        DS       23     35    43

Cdf     EAD      34     33    23
        ADA      12     34    25

I performed:

df1.groupby(['Name','Subject' ]).sum().reset_index().assign(project =lambda x: x['Name'].where(~x['Name'].duplicated(),''))

I am not getting how to add empty row between each Name

Mayank Porwal
  • 33,470
  • 8
  • 37
  • 58
CodingNinja
  • 109
  • 6

1 Answers1

0

Consider below df:

In [993]: df
Out[993]: 
  Name Subject  IA1  IA2  IA3
0  Abc      DS   45   43   34
1  Abc     DMS   43   23   45
2  Abc     ADA   32   46   36
3  Bcd      BA   45   35   37
4  Bcd     EAD   23   45   12
5  Bcd      DS   23   35   43
6  Cdf     EAD   34   33   23
7  Cdf     ADA   12   34   25

Do this:

In [994]: df1 = df.set_index(['Name', 'Subject'])

In [990]: def f(x):
     ...:     x.loc[('', ''), :] = ''
     ...:     return x
     ...: 

In [997]: df1.groupby(level=0, group_keys=False).apply(f)
Out[997]: 
             IA1 IA2 IA3
Name Subject            
Abc  DS       45  43  34
     DMS      43  23  45
     ADA      32  46  36
                        
Bcd  BA       45  35  37
     EAD      23  45  12
     DS       23  35  43
                        
Cdf  EAD      34  33  23
     ADA      12  34  25

On exporting above df to csv, this is how it looks:

enter image description here

Mayank Porwal
  • 33,470
  • 8
  • 37
  • 58