Найти max n значений в каждом столбце в пандах динамически [дублировать]

Необработанный тип - это имя общего класса или интерфейса без аргументов типа. Например, с учетом общего класса Box:

public class Box {
    public void set(T t) { /* ... */ }
    // ...
}

Чтобы создать параметризованный тип Box, вы указываете фактический аргумент типа для параметра формального типа T:

Box intBox = new Box<>();

Если аргумент фактического типа опущен, вы создаете необработанный тип Box:

Box rawBox = new Box();

. Поэтому Box является необработанным типом родового типа Box. Однако не общий тип или тип интерфейса не является сырым типом.

Необработанные типы отображаются в устаревшем коде, потому что многие классы API (например, классы Collections) не были типичными до JDK 5.0. При использовании сырых типов вы, по существу, получаете поведение перед генериками - Box дает вам Object s. Для обратной совместимости допускается присвоение параметризованного типа его необработанному типу:

Box stringBox = new Box<>();
Box rawBox = stringBox;               // OK

Но если вы назначаете сырой тип параметризованному типу, вы получите предупреждение:

Box rawBox = new Box();           // rawBox is a raw type of Box
Box intBox = rawBox;     // warning: unchecked conversion

Вы также получаете предупреждение, если используете необработанный тип для вызова общих методов, определенных в соответствующем родовом типе:

Box stringBox = new Box<>();
Box rawBox = stringBox;
rawBox.set(8);  // warning: unchecked invocation to set(T)

Предупреждение показывает, что необработанные типы обходят общие проверки типа, откладывая улов небезопасных код для выполнения. Поэтому вам следует избегать использования необработанных типов.

В разделе «Тип стирания» содержится дополнительная информация о том, как компилятор Java использует необработанные типы.

Непроверенные сообщения об ошибках

As упомянутый ранее, при смешивании устаревшего кода с общим кодом вы можете столкнуться с предупреждающими сообщениями, подобными следующим:

Примечание: Example.java использует непроверенные или небезопасные операции.

Примечание : Перекомпиляция с -Xlint: не проверяется для деталей.

Это может произойти при использовании более старого API, который работает с необработанными типами, как показано в следующем примере:

public class WarningDemo {
    public static void main(String[] args){
        Box bi;
        bi = createBox();
    }

    static Box createBox(){
        return new Box();
    }
}

Термин «непроверенный» означает, что компилятор не имеет достаточной информации о типе для выполнения всех проверок типа, необходимых для обеспечения безопасности типа. Предупреждение «unchecked» по умолчанию отключено, хотя компилятор дает подсказку. Чтобы просмотреть все «непроверенные» предупреждения, перекомпилируйте с помощью -Xlint: unchecked.

Повторная компиляция предыдущего примера с -Xlint: unchecked показывает следующую дополнительную информацию:

WarningDemo.java:4: warning: [unchecked] unchecked conversion
found   : Box
required: Box
        bi = createBox();
                      ^
1 warning

Чтобы полностью отключить unchecked warnings, используйте флаг -Xlint: -unchecked. Аннотации @SuppressWarnings("unchecked") подавляют непроверенные предупреждения. Если вы не знакомы с синтаксисом @SuppressWarnings, см. Аннотации.

Исходный источник: Учебники по Java

3
задан user1802143 6 December 2013 в 05:29
поделиться

6 ответов

С меньшей серией, вам лучше просто сортировать, а затем взять голову / хвост!

Это запрос функции панды , должен видеть в 0.14 (нужно преодолеть некоторые биты с разными типами данных), эффективное решение для более крупных рядов (> 1000 элементов) использует kth_smallest из pandas algos (предупреждение этой функции мутирует массив, к которому он применяется, чтобы использовать копию!):

In [11]: s = pd.Series(np.random.randn(10))

In [12]: s
Out[12]: 
0    0.785650
1    0.969103
2   -0.618300
3   -0.770337
4    1.532137
5    1.367863
6   -0.852839
7    0.967317
8   -0.603416
9   -0.889278
dtype: float64

In [13]: n = 3

In [14]: pd.algos.kth_smallest(s.values.astype(float), n - 1)
Out[14]: -0.7703374582084163

In [15]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)]
Out[15]: 
3   -0.770337
6   -0.852839
9   -0.889278
dtype: float64

Если вы хотите это по порядку:

In [16]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)].order()
Out[16]: 
9   -0.889278
6   -0.852839
3   -0.770337
dtype: float64

Если вы беспокоитесь о дубликатах (присоединитесь к n-му месту), вы можете взять голову:

In [17]: s[s <= pd.algos.kth_smallest(s.values.astype(float), n - 1)].order().head(n)
Out[17]: 
9   -0.889278
6   -0.852839
3   -0.770337
dtype: float64
1
ответ дан Andy Hayden 18 August 2018 в 20:04
поделиться

Вы хотите взглянуть на argsort numpy и в pandas )

df = pd.DataFrame(np.random.randint(1,100,100).reshape(10,10))
# bottom three indexes
df[0].argsort().values[:3]    
# top three indexes
df[0].argsort().values[-3:]
1
ответ дан Phil Cooper 18 August 2018 в 20:04
поделиться
In [55]: import numpy as np               

In [56]: import pandas as pd              

In [57]: s = pd.Series(np.random.randn(5))

In [58]: s
Out[58]: 
0    0.152037
1    0.194204
2    0.296090
3    1.071013
4   -0.324589
dtype: float64

In [59]: s.nsmallest(3) ## s.drop_duplicates().nsmallest(3); if duplicates exists               
Out[59]: 
4   -0.324589
0    0.152037
1    0.194204
dtype: float64

In [60]: s.nlargest(3) ## s.drop_duplicates().nlargest(3); if duplicates exists             
Out[60]: 
3    1.071013
2    0.296090
1    0.194204
dtype: float64
0
ответ дан Surya 18 August 2018 в 20:04
поделиться

Что вы пробовали? Вы можете сортировать с s.sort(), а затем вызвать s.head(3).index и s.tail(3).index.

4
ответ дан TomAugspurger 18 August 2018 в 20:04
поделиться
0
ответ дан ramakrishnareddy 7 September 2018 в 04:13
поделиться
0
ответ дан ramakrishnareddy 30 October 2018 в 08:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: