вы можете позаботиться о первых 3 предметах с нарезкой и головой:
df[df.A>=4].head(1)
df[(df.A>=4)&(df.B>=3)].head(1)
df[(df.A>=4)&((df.B>=3) * (df.C>=2))].head(1)
Условие в случае, если ничего не возвращается, вы можете обрабатывать с помощью try или if, если ...
try:
output = df[df.A>=6].head(1)
assert len(output) == 1
except:
output = df.sort_values('A',ascending=False).head(1)
Это вызвано обновленной службой UpgradeModule, которую вы используете здесь:
import { UpgradeModule } from '@angular/upgrade/static';
Вы используете ее, потому что хотите, чтобы UpgradeModule понизил угловой коэффициент 2 до углового JS.
Если вы вникнете в код UpgradeModule, вы можете обнаружить, что этот модуль определяет новый угловой модуль с именем $$ UpgradeModule.
Этот модуль регистрирует поставщик значений с именем $$ angularInjector (тот, который находится в ошибка выше) - эта вещь $$ angularInjector отвечает за инъекцию угловых модулей в угловые JS.
Решение заключается в том, чтобы импортировать модуль в оператор импорта, чтобы угловой JS имел доступ к его услугам.
Вы забыли импортировать UpgradeModule. Вот ответ из официальной документации :
@NgModule({
declarations: [Ng2HeroesComponent, Ng1HeroComponentWrapper],
providers: [
HeroesService,
// Register an Angular provider whose value is the "upgraded" AngularJS service
{provide: 'titleCase', useFactory: (i: any) => i.get('titleCase'), deps: ['$injector']}
],
// All components that are to be "downgraded" must be declared as `entryComponents`
entryComponents: [Ng2HeroesComponent],
// We must import `UpgradeModule` to get access to the AngularJS core services
imports: [BrowserModule, UpgradeModule]
})
class Ng2AppModule {
ngDoBootstrap() { /* this is a placeholder to stop the boostrapper from complaining */
}
}
, поэтому сначала вам нужно изменить свой код на:
ng2.module.ts:
import 'reflect-metadata';
import '@angular/core';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { UpgradeModule } from '@angular/upgrade/static';
import { AppComponent } from './components/app/app.component.ts';
@NgModule({
imports: [ BrowserModule, UpgradeModule ],
declarations: [ AppComponent ],
entryComponents: [ AppComponent ]
})
export class Ng2Module {
ngDoBootstrap() {}
}
Также для того, чтобы понизить ваш компонент от ng2 до углового 1
Вы должны создать директиву AngularJS, которая сделает этот угловой компонент доступным внутри шаблонов AngularJS:
ng1AppModule.directive('Ng2Module', downgradeComponent({component: AppComponent}));
function downgradeComponent(info: { component: Type< This parameter is no longer used */ selectors?: string[]; }): any;
Существует очень полезный пост , в котором подробно объясняется, как создать гибридное угловое приложение, а также сценарий, когда у вас есть компонент v4, и вы хотите использовать его в шаблоне v1 .