Вы можете использовать маску , чтобы найти нужные записи
import datetime
df = pd.DataFrame([['1','2008-04-02','2008-07-10']],
columns=['license', 'issue', 'expire'])
parse_date = lambda x: return datetime.datetime.strptime(x, '%Y-%m-%d')
dt = parse_date('2008-06-01')
date_between = lambda x: parse_date(x['issue']) > dt and parse_date('expire') < dt
df = df[df.apply(date_between)]
. Таким образом, вы можете использовать список для сохранения результата:
s = []
for ds in active_day:
dt = parse_date(ds)
n = df[df.apply(date_between)].license.count()
s.append((dt, n))
result_df = df.DataFrame(s, columns=['active_day', 'count'])
Вы должны к пользовательским дженерикам в C# 2 достигнуть этого:
public interface ICart<T> where T : ICartItem
{
// ...
List<T> CartItems { get; set; }
}
public abstract class Cart : ICart<CartItem>
{
// ...
public List<CartItem> CartItems { get; set; }
}
В Вашем абстрактном классе необходимо определить это тип возврата свойства CartItems, имеет тип List<ICartItem>
.
Но, если Вы действительно хотите это, свойство имеет тип List<CartItem>
, можно, возможно, сделать это:
public interface ICart<TCartItem> where TCartItem : ICartItem
{
List<TCartItem> CartItems { get; set; }
}
public interface ICartItem
{
}
public abstract class Cart : ICart<CartItem>
{
public List<CartItem> { get; set; }
}
public abstract class CartItem : ICartItem
{
}
Интерфейс является соглашением. Контракт, если Вы будете между Вами и кем-либо, кто использует Ваш класс. Путем сообщения людям, что Вы реализуете интерфейс ICart, Вы обещаете им, что все методы в интерфейсе существуют на Вашем классе. Таким образом все Ваши методы должны соответствовать подписям методов интерфейса.
Чтобы к возврату списка объектов, которые реализуют ICartItem, необходимо использовать дженерики, как предложено DrJokepu. Это говорит всем, что интерфейс только gurentees список объектов, которые реализуют ICartItem, не ICartItem конкретно.
public interface ICart<T> where T : ICartItem
{
List<T> CartItems { get; set; }
}
Это - вопрос мятежника/ковариантности.
2 изменения требуются, чтобы делать эту компиляцию.
1) Удалите опцию "набора" на свойстве интерфейса. (Это только реализует получение; свойство, которое имеет большую часть смысла, в любом случае),
2) Корзина изменения к:
public abstract class Cart : ICart
{
private List<CartItem> _cartItems = new List<CartItem>();
public List<ICartItem> CartItems
{ ...
Я также настоятельно рекомендую изменение Вашего интерфейса для представления IList вместо Списка. Руководство по проектированию (и FxCop) рекомендует не выставить Список в открытом интерфейсе. Список является деталью реализации - IList является соответствующим типом интерфейса/возврата.
ICart указывает метод считывания и метод set для CartItems, но Ваша реализация только имеет получение.