Уменьшите строки и поиск в кадре - PullRequest
0 голосов
/ 31 мая 2018

Нужна помощь со следующим, пожалуйста.Предположим, у нас есть фрейм данных:

dictionary ={'Category':['a','a','a','a','a','a','a','a','b','b','b','b','b','b','b'], 
'val1':[11,13,14,17,18,21,22,25,2,8,9,13,15,16,19],
'val2':[1,0,5,1,4,3,5,9,4,1,5,2,4,0,3]}

df=pd.DataFrame(dictionary)

'val1' всегда увеличивается в пределах одного и того же значения в категории, то есть первая и последняя строки категории являются минимальными и максимальными значениями этой категории.В каждой категории слишком много строк, и я хочу создать новый фрейм данных, который включает в себя значения min и max для каждой категории и содержит равные интервалы, например, 5 строк (включая min и max)из каждой категории.Я думаю, что numpy linspace должен использоваться для создания массива значений для каждой категории (например, linspace(min, max, 5)), тогда что-то похожее на функцию 'lookup' в Excel должно использоваться для получения ближайших значений 'val1' изДФ.Или, может быть, есть и другие лучшие способы ...

Большое спасибо за помощь.

1 Ответ

0 голосов
/ 31 мая 2018

Это то, что вам нужно?с groupby и reindex

l=[]
for _, x in df.groupby('Category'):
    x.index=x['val1']
    y=x.reindex(np.linspace(x['val1'].min(), x['val1'].max(), 5),method='nearest')
    l.append(y)
pd.concat(l)
Out[330]: 
      Category  val1  val2
val1                      
11.00        a    11     1
14.50        a    14     5
18.00        a    18     4
21.50        a    22     5
25.00        a    25     9
2.00         b     2     4
6.25         b     8     1
10.50        b     9     5
14.75        b    15     4
19.00        b    19     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...