Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用lamda函数指定分组,并在数据帧中保留所需的其他列?_Python_Pandas_Lambda_Pandas Groupby - Fatal编程技术网

Python 如何使用lamda函数指定分组,并在数据帧中保留所需的其他列?

Python 如何使用lamda函数指定分组,并在数据帧中保留所需的其他列?,python,pandas,lambda,pandas-groupby,Python,Pandas,Lambda,Pandas Groupby,我已将数据帧分组。然后我想在这些组中使用lambda函数。但是,我使用的代码没有返回正确的结果。我认为分组或lambda函数有问题。非常具体地说,我希望采用分组数据帧,只返回代码计数最高的行。要返回的最高行数的n取决于该组的SPOT_NUM。因此,每个组都应该返回不同数量的行 我已尝试更改原始数据帧中的分组。然后,我尝试在lambda函数行中指定所需的分组。我还研究了重置索引。我不确定这是否与此有关。但我仍然没有得到我想要的结果 #subsetting the logs filtered_log

我已将数据帧分组。然后我想在这些组中使用lambda函数。但是,我使用的代码没有返回正确的结果。我认为分组或lambda函数有问题。非常具体地说,我希望采用分组数据帧,只返回代码计数最高的行。要返回的最高行数的n取决于该组的SPOT_NUM。因此,每个组都应该返回不同数量的行

我已尝试更改原始数据帧中的分组。然后,我尝试在lambda函数行中指定所需的分组。我还研究了重置索引。我不确定这是否与此有关。但我仍然没有得到我想要的结果

#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)
这就是我将在lambda函数中使用的数据帧的分组方式

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'])

提供一些样本数据(更好的是生成样本日期的代码)和预期的输出将使这更容易处理和回答我刚刚编辑的问题,以添加样本数据。我给出了分组数据帧的外观。这是lambda函数应用于的数据。@SoSincere3如果您没有引用正确的数据帧来获取所需的行数,请将
town\u grouped1['SPOT\u NUM'].iloc[0]
替换为
grp['SPOT\u NUM']。iloc[0]
替换为
nlargest
@Ben.这绝对解决不了问题!你能解释一下grp是如何成为数据帧的吗?我在lambda函数中使用了,认为它是指我之前进行的分组。@SoSincere3它实际上是分组数据,但
grp
的类型是dataframe。您需要获取每个组的SPOT_NUM值,以便获得正确的值,然后使用引用该组的
grp
,而不是引用所有数据的
town_grouped1
,并且第一个值始终是此数据帧的第一个值。如果提供一些样本数据(更好的是生成样本日期的代码)和预期的输出有意义的话,那么就更容易处理和回答我刚刚编辑的添加样本数据的问题。我给出了分组数据帧的外观。这是lambda函数应用于的数据。@SoSincere3如果您没有引用正确的数据帧来获取所需的行数,请将
town\u grouped1['SPOT\u NUM'].iloc[0]
替换为
grp['SPOT\u NUM']。iloc[0]
替换为
nlargest
@Ben.这绝对解决不了问题!你能解释一下grp是如何成为数据帧的吗?我在lambda函数中使用了,认为它是指我之前进行的分组。@SoSincere3它实际上是分组数据,但
grp
的类型是dataframe。您需要获取每个组的SPOT_NUM值,以便获得正确的值,然后使用引用该组的
grp
,而不是引用所有数据的
town_grouped1
,并且第一个值始终是此数据帧的第一个值。如果有道理的话