Уменьшить размерность данных в Python - PullRequest
0 голосов
/ 23 октября 2018

У меня есть датафрейм, содержит три столбца.Я хочу уменьшить размеры фрейма данных.

  data = [[1, 876, 0.98],[1, 888, 0.58],[1, 976, 0.48],[1, 648, 0.98],[2, 765, 0.28], [2, 986, 0.28], [2, 765, 1.0], [2, 876, 0.45]]
    sample = pd.DataFrame(data, columns=['col1','col2', 'col3'])
   col1  col2  col3
0     1   876  0.98
1     1   888  0.58
2     1   976  0.48
3     1   648  0.98
4     2   765  0.28
5     2   986  0.28
6     2   765  1.00
7     2   876  0.45

Я хочу указать ниже желаемый результат на основе условия: 1. Для каждого значения в столбце col1 должна быть одна строка, а в столбце 4 должен быть списоккортежи (col2, col3) 2. col4 должен иметь только два верхних кортежа на основе значений в col3.Например, в примере кадра данных в col2 765 происходило два раза, конечный кадр данных должен принимать тот, который имеет наибольшее значение в столбце col3 и второй по величине

data = [[1, [(876, 0.98),(648, 0.98)]],[2, [(876, 0.45), (765, 1.0)]]]
desired_output = pd.DataFrame(data, columns=['col1', 'col2'])

   col1                        col4
0     1  [(876, 0.98), (648, 0.98)]
1     2   [(876, 0.45), (765, 1.0)]

Я хочу сохранить в списке кортеж, чтобыЯ могу использовать это для каких-то других целей. Это только часть решения более крупной проблемы.

1 Ответ

0 голосов
/ 24 октября 2018

FWIW

sample = sample.sort_values(['col1', 'col3'], ascending=[True, False])
sample.groupby('col1')[['col2', 'col3']].apply(
    lambda d: [*d.head(2).itertuples(index=False)]
).reset_index(name='col4')

   col1                        col4
0     1  [(876, 0.98), (648, 0.98)]
1     2   [(765, 1.0), (876, 0.45)]

Они будут названы кортежами.Вы можете избежать этого с name=None

sample = sample.sort_values(['col1', 'col3'], ascending=[True, False])
sample.groupby('col1')[['col2', 'col3']].apply(
    lambda d: [*d.head(2).itertuples(index=False, name=None)]
).reset_index(name='col4')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...