(
df
.assign(
groups=(df['EventType'] != df['EventType'].shift())
.cumsum()
)
.groupby('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(drop=True)
.loc[:,['user_id','EventType','first','last']]
)
(
df
.groupby(
(df["EventType"] != df["EventType"].shift())
.cumsum()
)
.agg({"EventTime" : ["min", "max"]})
)
Остальное это манипуляции для идентичного твоему вывода (писал на скорую руку совместил агрегации с трансформациями) что не есть хорошо, я бы поработал и сделал лучше. В целом сработает и для строк, но лучше привести EventTime к типу данных datetime64[ns]. Сделать это можно (
df.assign(
EventTime=lambda x: pd.to_datetime(x['EventTime'],format='%Y-%m-%d %H:%M:%S')
)
...
)
apply
он применяется к каждой строке или каждой колонке параметр axis
, то есть когда ты пишешь свою кастомную функцию на вход она будет получать либо numpy массив либо pandas Series. Вообще apply
для фрейма имеет довольно много интересных параметров почитай доки этого метода он реально мощный. pipe(func, *args, **kwargs)
и тебе приходит копия оригинального фрейма с твоими изменениями описанными в func
, это очень хорошая практика. Номер Телефона,Имя,Фамилия
333,Иван,Петров
333,Василий,Сидоров
444,Петр,Прямой
333,Федор,Кривой
import pandas as pd
phone_numbers = pd.read_csv('test.csv',index_col='Номер Телефона')
numbers_of_interset = [777,333]
index = phone_numbers.index.intersection(numbers_of_interset)
not_found = pd.Index(numbers_of_interset).difference(phone_numbers.index)
(
phone_numbers.loc[index,:]
.to_csv('result.csv')
)
print(phone_numbers.loc[index,:].shape[0])
Даст тебе количество. return
прерывает функцию. То есть у тебя происходит только одна итерация цикла, и затем выход из функции. Собери itemPrice[0] в список объявленный вне цикла (result.append(itemPrice[0]))
и верни result вне цикла.
Имей ввиду то что ты в своей имплементации объявил itemPrice
вне цикла и это имеет 0 эффекта, так как при каждой итерации у тебя создается новый объект, например вот здесь itemPrice = i.find(...
Готов потратить год на изучение DS,Не реально. Я бы не советовал менять тебе профессию, а если хочешь в DS начни учится, и не на курсах а самостоятельно и начинать надо с программирования.
df.loc[:,['A','B','C']] = np.sort(df[['A','B','C']].values,axis=1)