Попробуйте groupby
метод:
df.groupby(["Name","Type"]).agg(["count","sum"])
Результат:
Value
count sum
Name Type
apple A 3 9
banana B 2 5
carrot C 1 3
pear P 1 4
Однако, если вы хотите сгладить столбцы / индекс, используйте:
df2 = df.groupby(["Name","Type"]).agg(["count","sum"]).reset_index(drop=False)
df2.columns = [' '.join(col).strip() for col in df2.columns.values]
Вывод :
Name Type Value count Value sum
0 apple A 3 9
1 banana B 2 5
2 carrot C 1 3
3 pear P 1 4
Еще более элегантное решение благодаря @piRSquared:
df2 = df.groupby(['Name', 'Type']).Value.agg([('AddedValue', 'sum'), ('Occurences', 'count')]).reset_index(drop=False)
Вывод:
Name Type AddedValue Occurences
0 apple A 9 3
1 banana B 5 2
2 carrot C 3 1
3 pear P 4 1