Найти наибольшее число в столбце - PullRequest
0 голосов
/ 08 октября 2018

Я пытаюсь найти месяц (столбец «Месяц») с наибольшим номером (в столбце DepDelay)

Данные

flightID         Month  ArrTime ActualElapsedTime  DepDelay   ArrDelay
BBYYEUVY67527        1   1514.0               58.0       NA      64.0   
MUPXAQFN40227        1     37.0              120.0       13      52.0   
LQLYUIMN79169        1    916.0              166.0       NA     -25.0   
KTAMHIFO10843        1      NaN                NaN        5       NaN   
BOOXJTEY23623        1      NaN                NaN        4       NaN  
BBYYEUVY67527        2   1514.0               58.0       NA      64.0   
MUPXAQFN40227        2     37.0              120.0       NA      52.0   
LQLYUIMN79169        2    916.0              166.0       NA     -25.0   
KTAMHIFO10843        2      NaN                NaN       15       NaN   
BOOXJTEY23623        2      NaN                NaN        4       NaN  

Я пытался:

data = pd.read_csv('data.csv', sep='\t')

dep_delay = all_data.groupby(["Month"].DepDelay.count().max())

print(dep_delay)

Ошибка:

AttributeError                            Traceback (most recent call last)
<ipython-input-14-2ea6213009d6> in <module>()
----> 1 dep_delay = all_data.groupby(["Month"].DepDelay.count().max())
      2 
      3 print(dep_delay)

AttributeError: 'list' object has no attribute 'DepDelay'

Хороший вывод:

Month      DepDelay
    1            22

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Вам нужно sum вместо count для суммирования значений по группам.Вот один из способов использования GroupBy + sum, а затем idxmax:

res = df.groupby('Month')['DepDelay'].sum().reset_index()
res = res.loc[[res['DepDelay'].idxmax()]]

print(res)

   Month  DepDelay
0      1      22.0

В качестве альтернативы, вы можете сгруппировать и отсортировать, а затем извлечь первую строку:

res = df.groupby('Month')['DepDelay'].sum()\
        .sort_values(ascending=False).head(1)\
        .reset_index()

print(res)

   Month  DepDelay
0      1      22.0
0 голосов
/ 08 октября 2018

Другой подход:

pd.DataFrame(df.loc[df['DepDelay'].idxmax(), ['Month', 'DepDelay']]).T
#  Month DepDelay
#8     2       15

И вы можете сбросить индекс для изменения 8 на 0:

pd.DataFrame(df.loc[df['DepDelay'].idxmax(), ['Month', 'DepDelay']]).T.reset_index(drop=True)
#  Month DepDelay
#0     2       15
0 голосов
/ 08 октября 2018

, чтобы ваш код работал, измените

dep_delay = all_data.groupby(["Month"].DepDelay.count().max())

на

dep_delay = all_data.groupby(["Month"]).DepDelay.count().max()

Чтобы найти решение:

idx = all_data['DepDelay'].idxmax()

all_data.loc[[idx], ['Month', 'DepDelay']]

Выход

     Month  DepDelay
8      2      15.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...