Не удается решить, как это сделать: «IndexError: индекс 0 выходит за границы оси 0 с размером 0» - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть следующая таблица:

Образцы данных:

e_id e_ctry e_grp_id e_loc_nbr e_loc_id e_sal
=============================================
111  03     65       889        03      10000
131  01     67       009        09      8000
152  02     12       545        09      17000
155  04     55       778        09      33000
115  04     55       778        09      33000
156  04     55       778        09      33000 
177  03     65       889        03      14000
122  03     65       889        03      14000
141  03     65       889        03      17000
171  03     65       889        03      14000

Пробуйте следующий код:

d_tbl = self.emp_d[['e_id','e_ctry','e_grp_id','e_loc_nbr','e_loc_id','e_sal']].drop_duplicates()


def e_c_rslt(self):
    e_c_data = self.d_tbl[(self.d_tbl['e_loc_id']==1) ][['e_id','e_ctry','e_grp_id','e_loc_nbr','e_sal']]
    e_c_grpd = e_c_data.groupby([e_id','e_grp_id','e_ctry']).e_sal.nunique().reset_index() 
    rslt_ac9b=e_c_grpd[e_c_grpd.e_sal>15000] 

, но продолжайте получать следующее сообщение об ошибке:

e_c_grpd = e_c_data.groupby([e_id','e_grp_id','e_ctry']).e_sal.nunique().reset_index() 

File "/usr/local/lib/python2.7/dist-packages/pandas/core/groupby.py", line 2866, in nunique
    res = out if ids[0] != -1 else out[1:]
IndexError: index 0 is out of bounds for axis 0 with size 0

Не понимаю, что я делаю не так?

Ожидаемое O / P:

e_id e_ctry e_grp_id  e_sal
===========================
111  03     65       10000
177  03     65       14000
122  03     65       14000
141  03     65       17000
171  03     65       14000

Требуется собрать ['e_id', 'e_ctry', 'e_grp_id'], если e_sal>15000 ивезде, где есть разные e_sal для тех же 'e_ctry', 'e_grp_id'.

Update_1:

После печати print(e_c_data) получение:

Empty DataFrame
Columns: [e_id,e_ctry,e_grp_id,e_loc_nbr,e_sal]
Index: []

1 Ответ

0 голосов
/ 28 сентября 2018

Это сообщение об ошибке говорит вам, что индексируемый объект имеет размер 0 - другими словами, он пустой.Почему это будет пусто?Ну, вы можете вставить print s, чтобы узнать, где это происходит, или мы можем просто посмотреть на ваш кадр:

e_id e_ctry e_grp_id e_loc_nbr e_loc_id e_sal
=============================================
111  03     65       889        03      10000
131  01     67       009        09      8000

Предполагая, что это репрезентативно, обратите внимание, что ваш столбец e_loc_id начинается с 0.Но если это целое число, это не так: они появляются без начальных нулей.Это означает, что у вас должны быть строки:

In [13]: df = pd.DataFrame({"A": [1,2], "B": ['01', '02']})

In [14]: df
Out[14]: 
   A   B
0  1  01
1  2  02

In [15]: df.dtypes
Out[15]: 
A     int64
B    object
dtype: object

Но если ваши e_loc_ds являются строками, это сравнение никогда не будет успешным:

self.d_tbl['e_loc_id']==1

и, следовательно, e_c_data пуст.

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