boec = fighter("вася",200,22) - создать экземпляр класса fighter, с атрибутами Вася, здороье 200, сила удара 22.
boec2 = fighter("bob",100,19) - создать экземпляр класса fighter, с атрибутами Боб, здороье 100, сила удара 19.
boec.udar(boec2) - Вася стукнул Боба.
def udar(self,other):
print(self.name + " наносит урон с руки" 'c уроном ' + str(self.dmg))
other.hp = other.hp - self.dmg
return "У " + other.name + " осталось здоровья: " + str(other.hp)
class fighter:
def __init__(self,name=None,hp=None,dmg=None,):
self.name = name
self.hp = hp
self.dmg = dmg
def udar(self,other):
print(self.name + " наносит урон с руки" ' c уроном ' + str(self.dmg))
other.hp = other.hp - self.dmg
return "У " + other.name + " осталось здоровья: " + str(other.hp)
boec = fighter("вася",200,22)
boec2 = fighter("bob",100,19)
print(
boec2.udar(boec),
boec.udar(boec2),
boec2.udar(boec),
sep='\n'
)
на него неплохой спрос- спрос для действующий специалистов с коммерческим опытом. Для новичков спроса на него практически нет.
df = pd.DataFrame({'A':[1,2,-1,-2,4]})
(df['A'] < 0).mean()
Условие может быть сколько угодно сложным включать в себя несколько колонок и т.д главное получить булевый массив и затем sum это количество True значений mean это их доля то есть доля строк удовлетворяющих условию. (
df
.assign(
EventTime=lambda x: pd.to_datetime(x['EventTime'],format='%Y-%m-%d %H:%M:%S')
)
.assign(
groups=(df['EventType'] != df['EventType'].shift())
.cumsum()
)
.groupby(['user_id','groups']
)
.agg(
first= pd.NamedAgg(column='EventTime',aggfunc=lambda x: np.min(x)),
last= pd.NamedAgg(column='EventTime',aggfunc=lambda x: np.max(x)),
EventType= pd.NamedAgg(column='EventType',aggfunc=lambda x: set(x).pop()),
# user_id=pd.NamedAgg(column='user_id',aggfunc=lambda x: set(x).pop()),
)
.reset_index()
.loc[:,['user_id','EventType','first','last']]
) Будет вот так. Все Идентично, только теперь группировка будет по двум колонкам.