Как указать мою группировку с помощью функции lamda и сохранить другие столбцы, которые мне нужны, в кадре данных? - PullRequest
1 голос
/ 05 июня 2019

Я сгруппировал фрейм данных.Затем я хочу использовать лямбда-функцию во всех этих группах.Однако код, который я использую, не возвращает правильные результаты.Я думаю, что есть проблема с группировкой или, возможно, лямбда-функцией.В частности, я собираюсь взять сгруппированный фрейм данных и вернуть только строки с наибольшим количеством JUGCODE.N для количества возвращаемых старших строк зависит от SPOT_NUM для этой группы.Итак, каждая группа должна возвращать разное количество строк.

Я попытался изменить группировку в исходном кадре данных.Затем я попытался указать нужную группировку в строке с лямбда-функцией.Я также исследовал сброс индекса.Я не уверен, что это как-то связано с этим.Но я все еще не получаю результаты, которые я ищу.

#subsetting the logs
filtered_logs = log_master.loc[(log_master['BILL_TYPE'] == "Town")]
#grouping the logs by everything except the JUGCODE - because that's the count I need
town_grouped = filtered_logs.groupby(['SPOT_ID','TIME', 'R_CODE', 'SPOT_NUM', 'CONTRACT_ID', 'NAME', 'CHNN', 'ZONE', 'MONTH', 'BILL_TYPE', 'MASTER', 'DATE', ]).count()
town_grouped1 = town_grouped.reset_index()
town_grouped1.head(10)

Вот так я сгруппировал фрейм данных, который я собираюсь использовать в своей лямбда-функции.

verified_spots = town_grouped1.groupby('SPOT_ID').apply(lambda grp: grp.nlargest((town_grouped1['SPOT_NUM'].iloc[0]), ['JUGCODE'])) 

Я обнаружил, что некоторые группы возвращают больше строк, чем SPOT_NUMдля своей группы.Вот проблему, которую я пытаюсь решить.

пример кода данных:

data = [['363662402','17:24:29','1061',3,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/01/2016',30], ['363662402',   '17:31:15','1061',3,'647333','BL08253062','CMDY','Savannah','201610','tampa','COMIC',   '10/03/2016',30], ['363662402','17:34:15','1061',3,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/02/2016',29], ['363662402','17:34:30','1061',3,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/02/2016',1], ['363662403','16:26:14','1061',3,'647333','BL08258415','CMDY','Savannah','201610','tampa','COMIC','10/09/2016',30], ['363662394','20:39:12','1061',4,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/02/2016',30], ['363662394','22:48:01','1061',4,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/02/2016',30], ['363662394','22:40:21','1061',4,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/01/2016',29], ['363662394','19:44:51','1061',4,'647333','BL08253061','CMDY','Savannah','201610','tampa','COMIC','10/01/2016',23]]

town_grouped1 = pd.DataFrame(data, columns = ['SPOT_ID','TIME', 'R_CODE', 'SPOT_NUM', 'CONTRACT_ID', 'NAME', 'CHNN', 'ZONE', 'MONTH', 'BILL_TYPE', 'MASTER', 'DATE', 'JUGCODE'])
...