Панды: найти максимальное значение в одном столбце, содержащем списки - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть такой кадр данных:

fly_frame:
          day    plcae
0  [1,2,3,4,5]       A
1    [1,2,3,4]       B
2        [1,2]       C
3     [1,2,3,4]      D

Если я хочу найти максимальное значение в каждой записи в столбце дня.

Например:

fly_frame:
          day    plcae
0           5       A
1           4       B
2           2       C
3           4       D

Что мне делать?
Спасибо за помощь.

Ответы [ 4 ]

0 голосов
/ 08 декабря 2018

Попробуйте комбинацию pd.concat () и df.apply () с:

import numpy as np
import pandas as pd


fly_frame = pd.DataFrame({'day':[[1,2,3,4,5],[1,2,3,4],[1,2],[1,2,3,4]],'place':['A','B','C','D']})

df = pd.concat([fly_frame['day'].apply(max),fly_frame.drop('day',axis=1)],axis=1)

print(df)



   day place
0    5     A
1    4     B
2    2     C
3    4     D

Редактировать Вы можететакже используйте df.join () с:

fly_frame.drop('day',axis=1).join(fly_frame['day'].apply(np.max,axis=0))


place  day
0     A    5
1     B    4
2     C    2
3     D    4
0 голосов
/ 08 декабря 2018
df.day.apply(max)
#0    5
#1    4
#2    2
#3    4
0 голосов
/ 08 декабря 2018

Я предлагаю сначала перенести ваш фрейм данных в лучший формат.

>>> df
               day plcae
0  [1, 2, 3, 4, 5]     A
1     [1, 2, 3, 4]     B
2           [1, 2]     C
3     [1, 2, 3, 4]     D
>>> 
>>> df = pd.concat([df.pop('day').apply(pd.Series), df], axis=1)
>>> df
     0    1    2    3    4 plcae
0  1.0  2.0  3.0  4.0  5.0     A
1  1.0  2.0  3.0  4.0  NaN     B
2  1.0  2.0  NaN  NaN  NaN     C
3  1.0  2.0  3.0  4.0  NaN     D

Теперь все проще, например, вычисление максимума числовых значений вдоль столбцов.

>>> df.max(axis=1)
0    5.0
1    4.0
2    2.0
3    4.0
dtype: float64

edit: переименование индекса также может быть полезно для вас.

>>> df.max(axis=1).rename(df['plcae'])
A    5.0
B    4.0
C    2.0
D    4.0
dtype: float64
0 голосов
/ 08 декабря 2018

Использовать apply с max:

#if strings

#import ast

#print (type(df.loc[0, 'day']))
#<class 'str'>

#df['day'] = df['day'].apply(ast.literal_eval)

print (type(df.loc[0, 'day']))
<class 'list'>

df['day'] = df['day'].apply(max)

Или список понимания:

df['day'] = [max(x) for x in df['day']]

print (df)
   day plcae
0    5     A
1    4     B
2    2     C
3    4     D
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...