У меня есть фрейм данных df=pd.DataFrame({'xx':[['100','5','3'], ['5','40'], ['100']]}), и я бы хотел, чтобы максимум каждого списка был числом. Поэтому я хотел бы получить это:
df=pd.DataFrame({'xx':[['100','5','3'], ['5','40'], ['100']]})
xx 0 100 1 40 2 100
Есть ли способ сделать это?
Добавление другого метода pandas с использованием series.explode для разбиения ряда списков на 1 серии, затем с помощью series.astype преобразовать в int, а затем взять max, сгруппированный по индексу :
series.explode
series.astype
df['max_col'] = df['xx'].explode().astype(int).max(level=0) #or:-> df['xx'].explode().astype(int).groupby(level=0).max()
0 100 1 40 2 100
Преобразуйте значения в целые числа и получите max значение:
max
df['xx'] = df['xx'].map(lambda x: max(int(y) for y in x))
Или используйте понимание списка:
df['xx'] = [max(int(y) for y in x) for x in df['xx']]
print(df) xx 0 100 1 40 2 100
вы можете использовать pandas .Series.apply :
df['max_xx'] = df['xx'].apply(lambda x: max(map(int, x))) df['max_xx']
вывод:
, если вы хотите использовать pandas .DataFrame.assign Вы можете использовать:
df.assign(max_xx=lambda x: [max(map(int, l)) for l in x.xx])