pandas: получить максимальное значение списка с номерами строк - PullRequest
1 голос
/ 16 марта 2020

У меня есть фрейм данных df=pd.DataFrame({'xx':[['100','5','3'], ['5','40'], ['100']]}), и я бы хотел, чтобы максимум каждого списка был числом. Поэтому я хотел бы получить это:

xx
0   100
1   40
2   100

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 16 марта 2020

Добавление другого метода pandas с использованием series.explode для разбиения ряда списков на 1 серии, затем с помощью series.astype преобразовать в int, а затем взять max, сгруппированный по индексу :

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
1 голос
/ 16 марта 2020

Преобразуйте значения в целые числа и получите 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
0 голосов
/ 16 марта 2020

вы можете использовать pandas .Series.apply :

df['max_xx'] = df['xx'].apply(lambda x: max(map(int, x)))
df['max_xx']

вывод:

0    100
1     40
2    100

, если вы хотите использовать pandas .DataFrame.assign Вы можете использовать:

df.assign(max_xx=lambda x: [max(map(int, l)) for l  in x.xx])
...