Как получить новый фрейм групируя по двум колонкам?
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