Угловой 7-канальный канал с пользовательским каналом для фильтрации данных значения

Предположим, что у вас есть два фрейма данных: df_1 и df_2, имеющие несколько полей (column_names), и вы хотите найти только те записи из df_1, которые не находятся в df_2, на основе некоторых полей (например, fields_x, fields_y), следуют следующему шаги.

Step1.Add столбца key1 и key2 в df_1 и df_2 соответственно.

Step2.Merge dataframes, как показано ниже. field_x и field_y - наши искомые столбцы.

Step3.Выберите только те строки из df_1, где key1 не равен key2.

Step4.Drop key1 и key2.

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

df_1['key1'] = 1
df_2['key2'] = 1
df_1 = pd.merge(df_1, df_2, on=['field_x', 'field_y'], how = 'left')
df_1 = df_1[~(df_1.key2 == df_1.key1)]
df_1 = df_1.drop(['key1','key2'], axis=1)
0
задан Muthukumar Marichamy 3 March 2019 в 19:36
поделиться

1 ответ

Поскольку фильтр будет возвращать данные в той же форме, что и ответ службы (т. Е. Массив карт), лучше сначала применить фильтр, а затем преобразовать каждый объект карты в его массив стран, используя keyvalue. [ 113]

<ng-container
        *ngFor="let mapObj of addedAirport[0] | searchFilterAirportBy: ['name']: searchAirport">
    <div class="airport-row row"
         *ngFor="let country of mapObj | keyvalue ; let in = index; ">
        {{country.key}}
        <div class="selection-row airport-selection row"
             *ngFor="let airport of country.value;  let inAirport = index; ">
            {{airport.name}}
        </div>
    </div>
</ng-container>

Однако обратите внимание, что не рекомендуется применять фильтры или сортировки к ngFor из-за проблем с производительностью.

0
ответ дан MP Droid 3 March 2019 в 19:36
поделиться
Другие вопросы по тегам:

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