Другими решениями являются назначение RangeIndex
или range
:
df.index = pd.RangeIndex(len(df.index))
df.index = range(len(df.index))
. Это быстрее:
df = pd.DataFrame({'a':[8,7], 'c':[2,4]}, index=[7,8])
df = pd.concat([df]*10000)
print (df.head())
In [298]: %timeit df1 = df.reset_index(drop=True)
The slowest run took 7.26 times longer than the fastest. This could mean that an intermediate result is being cached.
10000 loops, best of 3: 105 µs per loop
In [299]: %timeit df.index = pd.RangeIndex(len(df.index))
The slowest run took 15.05 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 7.84 µs per loop
In [300]: %timeit df.index = range(len(df.index))
The slowest run took 7.10 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 14.2 µs per loop
Вы можете сделать это без необходимости в провайдере в вашем NinjectModule
:
Bind<IPrincipal>()
.ToMethod(ctx => HttpContext.Current.User)
.InRequestScope();
Обратите внимание, я включил .InRequestScope ()
, чтобы гарантировать, что значение метода кэшируется один раз за HTTP-запрос. Я бы рекомендовал сделать это, даже если вы используете механизм провайдера.
Думаю, я понял:
public class PrincipalProvider : IProvider
{
public object Create(IContext context)
{
return HttpContext.Current.User;
}
public System.Type Type
{
get { return typeof(CustomPrincipal); }
}
}
И в моем NinjectModule я делаю:
Bind<IPrincipal>().ToProvider<PrincipalProvider>();
Если это неправильно или не полностью, пожалуйста, дайте мне знать, и я ' Буду корректировать / удалять.