У меня есть пандас данных. DataFrame имеет 4 столбца. Последний - это всего лишь некоторые случайные данные. Первые два столбца - это столбцы, которые я буду группировать и суммировать столбец значения. Из каждой группировки я хотел бы только сохранить первую строку (то есть группа с самой большой суммой). < /P>
Мои данные: < /p>
import pandas as pd
df = pd.DataFrame(data=[['0', 'A', 3, 'a'],
['0', 'A', 2, 'b'],
['0', 'A', 1, 'c'],
['0', 'B', 3, 'd'],
['0', 'B', 4, 'e'],
['0', 'B', 4, 'f'],
['1', 'C', 3, 'g'],
['1', 'C', 2, 'h'],
['1', 'C', 1, 'i'],
['1', 'D', 3, 'j'],
['1', 'D', 4, 'k'],
['1', 'D', 4, 'l']
], columns=['group col 1', 'group col 2', 'value', 'random data']
)
< /code>
желаемый вывод: < /p>
group col 1 group col 2 value random data
3 0 B 3 d
4 0 B 4 e
5 0 B 4 f
9 1 D 3 j
10 1 D 4 k
11 1 D 4 l
< /code>
У меня есть неэффективный способ добраться туда, но ищу более простое решение. < /p>
Мое решение: < /p>
df1 = df.groupby(['group col 1','group col 2']).agg('sum').reset_index()
biggest_groups= df1.sort_values(by=['group col 1', 'value'], ascending=[True, False])
biggest_groups = biggest_groups.groupby('group col 1').head(1)
pairs = biggest_groups[['group col 1', 'group col 2']].values.tolist()
pairs = [tuple(i) for i in pairs]
df = df[df[['group col 1', 'group col 2']].apply(tuple, axis = 1).isin(pairs)]
Подробнее здесь: https://stackoverflow.com/questions/610 ... -in-pandas
Сохранить наибольшее значение на основе суммы двух групп в пандах ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение