df = pd.DataFrame({
'A':[1,'a',2],
'B':[1,'a',3]
})
df.loc[df['A'] == df['B']]
pd.merge(левая таблица, правая таблица, left_on='CELL',right_on='GeranCellId ', how=method)
(
pd.DataFrame({
'string_dates':['17.08.2024','15.08.2024','20.09.2024'],
'values':[10,100,1000]
})
.assign(
dates=lambda x: pd.to_datetime(x['string_dates'],format='%d.%m.%Y')
)
.sort_values(by='dates')
)
как видишь все сортируется, обрати внимания на типы данных. Колонку которая используется для сортировки можно дропнуть, ну или создать ее что называется "на лету". df = pd.DataFrame({
'userID':[25,188,79],
'goalsID':[[1,2,4,5],[3,6],[1,9]]
})
(
df.loc[lambda x:x['goalsID'].apply(lambda x: 3 in x)]
)
print(df[['market_cap'] > 0])
print(df[df['market_cap'] > 0])
df = pd.DataFrame({
'A':[np.random.randint(1,100,20) for i in range(5)],
})
result = (
df.assign(
three_largest = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).tolist()),
three_largest_index = lambda x: x['A'].apply(lambda x: pd.Series(x).nlargest(3).index.tolist())
)
)
result[['one','two','three']] = pd.DataFrame(result['three_largest_index'].tolist(),index=result.index)
result
Как видишь все в разных вариациях, как удобно. df = pd.DataFrame({
'A':[[5,6,24,3],[23,11,15],[3,100]],
'B':np.NaN
})
(
df.assign(
A_max =lambda x: x['A'].apply(max),
B_indexmax =lambda x: x['A'].apply(lambda x: pd.Series(x).idxmax()),
)
)
чтобы мне достать из этих столбцов уникальные значенияВот это не совсем понятно, может имелось ввиду из списков, уникальные, и что значит достать.
(
pd.DataFrame({
'ID':[1,2],
'genres':[['Strategy'],['Fightening','Adventure','Arcade']]
})
.explode('genres')
)
Затем unique (уникальные) value_counts (посчитать каких и сколько у тебя там) или все что угодно, опций огромное количество. Обрати внимание структура фрейма не рушится (поведение колонки ID).(
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
, это очень хорошая практика. df.loc[:,['A','B','C']] = np.sort(df[['A','B','C']].values,axis=1)
result = df.assign(**{
'Системы:':lambda x:x['Системы:'].str.strip(),
'Текущий %:':lambda x:x['Текущий %:'].str.strip(),
'Плановый %:':lambda x:x['Плановый %:'].str.strip()
})
print(result)
index = pd.date_range('1/1/2000', periods=9, freq='min')
df= pd.DataFrame(data=np.random.randint(1,10,(9,2)), index=index, columns=['A','B'])
df.resample('3min').agg({'A':'sum','B':'mean'})
Я создал фрейм с индексом временная последовательность (1 мин). сгруппировал по 3минуты и применил к каждой из колонок разные аггрегирующие функции.pd.options.mode.copy_on_write = True
info = {'color': ['blue', 'green', 'yellow', 'red', 'white'],
'object': ['ball', 'pen', 'pencil', 'paper', 'mug'],
'price': [1.2, 1.0, 0.6, 0.9, 1.7]}
frame = pd.DataFrame(info)
frame.loc[2,'price'] = 100
print(frame)
df = df.read_csv(filename, sep=';')
Ну и остальные параметры которые ты там указываешь. Решит ли это все проблемы неизвестны. Надо видеть в каком состоянии файл. Чтение файлов иногда может быть серьезной проблемой, которая потребует написания функций для проблемной части парсинга. f = pd.DataFrame({
'A':['a',np.NaN,np.NaN,'b',np.NaN,np.NaN,np.NaN,'v',np.NaN,np.NaN,'d',np.NaN,np.NaN],
'B':['foo','foo','bar','bar','bar','foo','bar','foo','bar','foo','bar','foo','bar']
})
result = (
df
.groupby(df['A']
.fillna(method='ffill'))['B']
.apply(lambda x: ','.join(x))
.reset_index()
)
result