У меня есть фрейм данных df
, который был получен при выполнении групповой операции с двумя столбцами:
df = data.groupby(['letters', 'syllables']).size()
Вот выходные данные первых 11 строк df
:
0
letters syllables
1 1 25
3 1
2 1 188
2 44
3 1
4 1
3 1 1304
2 189
3 89
4 2
5 3
Я бы хотел отфильтровать df
, чтобы для каждого индекса в letters
отображались только максимальные и минимальные индексы syllables
, что дает следующий вывод:
0
letters syllables
1 1 25
3 1
2 1 188
4 1
3 1 1304
5 3
Еще лучше было бы создать фрейм данных следующим образом:
0
letters statistic syllables
1 min 1 25
max 3 1
2 min 1 188
max 4 1
3 min 1 1304
max 5 3
Полный фрейм данных содержит 120 строк.Я знаю, что мог бы сделать это с помощью цикла, но я пытаюсь лучше понять операции pandas и хотел бы знать, как сделать это более эффективно.
Приведенные выше примеры данных могут быть импортированы из файла csv вфрейм данных многоуровневого индекса с использованием следующего:
df = pd.read_csv('data.csv', index_col=[0,1])
Редактировать: Вот вывод кода, предложенного Эрфаном:
df = data.groupby(['letters', 'syllables']).agg({'letters' : 'size', 'syllables' : ['min', 'max']})
Вывод:
letters syllables
size min max
letters syllables
1 1 25 1 1
3 1 3 3
2 1 188 1 1
2 44 2 2
3 1 3 3
4 1 4 4
3 1 1304 1 1
2 189 2 2
3 89 3 3
4 2 4 4
5 3 5 5