Как получить новый фрейм групируя по двум колонкам?

0      name1      1256           механическая
1      name1      1310          электрическая
2      name1      1221   Механическая поломка
3      name1       432           механическая
4      name2      3530          электрическая 
5      name2       291  Электрическая поломка
6      name2      1277   Механическая поломка
7      name3       309   Механическая поломка
8      name3       741          электрическая 
9      name3       501  Электрическая поломка

получить такой:

name1      2909            механическая
name1      1310           электрическая
name2      3821           электрическая
name2      1277            механическая
.......................................

В фрейме данных могут попадаться разные причины: Электрическая поломка и электрическая, также с механической. Но посути это одно и тоже.

Пробовал так

new_df.groupby(['col1','col3']).col2.sum().sort_values(ascending=True) 

Но проблема с разным текстом в 3 колонки. Как быть?


Ответы (1 шт):

Автор решения: MaxU

как-то так:

In [146]: df.assign(x=df["desc"].str.lower().str.split().str[0]).groupby(["name", "x"])["val"].sum().reset_index()
Out[146]:
    name              x   val
0  name1   механическая  2909
1  name1  электрическая  1310
2  name2   механическая  1277
3  name2  электрическая  3821
4  name3   механическая   309
5  name3  электрическая  1242
→ Ссылка