Home > Software engineering >  Copy first of group down and sum total - pre defined groups
Copy first of group down and sum total - pre defined groups

Time:10-12

I have previously asked how to iterate through a prescribed grouping of items and received the solution.

import pandas as pd

data = [['apple', 1], ['orange', 2], ['pear', 3], ['peach', 4],['plum', 5], ['grape', 6]]
#index_groups = [0],[1,2],[3,4,5]
df = pd.DataFrame(data, columns=['Name', 'Number'])

for i in range(len(df)):
    print(df['Number'][i])


       Name     Age
0      apple    1
1      orange   2
2      pear     3
3      peach    4
4      plum     5
5      grape    6

where :

for group in index_groups:
print(df.loc[group])

gave me just what I needed. Following up on this I would like to now sum the numbers per group but also copy down the first 'Name' in each group to the other names in the group, and then concatenate so one line per 'Name'.

In the above example the output I'm seeking would be

      Name     Age
0      apple    1
1      orange   5
2      peach    15

I can append the sums to a list easy enough

group_sum = []
group_sum.append(sum(df['Number'].loc[group]))

But I can't get the 'Names' in order to merge with the sums.

CodePudding user response:

You could try:

df_final = pd.DataFrame()

for group in index_groups:
    _df = df.loc[group]
    _df["Name"] = df.loc[group].Name.iloc[0]
    df_final = pd.concat([df_final, _df])
    
df_final.groupby("Name").agg(Age=("Number", "sum")).reset_index()

Output:

    Name    Age
0   apple   1
1   orange  5
2   peach   15
  • Related