假设我有一个包含大约21亿条记录的数据集。这是一个包含客户信息的数据集,我想知道他们做了多少次。所以我应该对ID进行分组并对一列求和(它有0和1值,其中1表示一个Action)。现在,我可以使用一个简单的groupBy和agg(sum)它,但据我所知,这并不是很有效。groupBy将在分区之间移动大量数据。或者,我也可以使用带有partitionBy子句的Window函数,然后对数据求和。缺点之一是我必须应用额外的过滤器,因为它会保留所有数据。我想要每个ID一条记录。但是我看不到这个窗口是如何处理数据的。是不是比这个groupBy和sum.还是一样? 最佳答
我试图找到每个user_id的平均每月费用,但我只能获得每个用户的平均费用或每个用户的每月费用。因为我按用户和月份分组,所以无法获得第二个分组依据(月份)的平均值,除非我将分组依据输出转换为其他内容。这是我的df:df={'id':pd.Series([1,1,1,1,2,2,2,2]),'cost':pd.Series([10,20,30,40,50,60,70,80]),'mth':pd.Series([3,3,4,5,3,4,4,5])}costidmth0101312013230143401545023560246702478025我可以获得每月总和,但我想要每个user_id
我有一个源自df.groupby().size()操作的DataFrame,看起来像这样:LocalizationRNAlevelcytoplasm1Non-expressed72Verylow133Low84Medium65Moderate86High27Veryhigh6cytoplasm&nucleus1Non-expressed52Verylow83Low24Medium105Moderate166High67Veryhigh5cytoplasm&nucleus&plasmamembrane1Non-expressed62Verylow33Low34Medium75Modera
假设我有这个数据框d={'Path':['abc','abc','ghi','ghi','jkl','jkl'],'Detail':['foo','bar','bar','foo','foo','foo'],'Program':['prog1','prog1','prog1','prog2','prog3','prog3'],'Value':[30,20,10,40,40,50],'Field':[50,70,10,20,30,30]}df=DataFrame(d)df.set_index(['Path','Detail'],inplace=True)dfFieldProgramVal
我有一个pandas数据框,我想计算列的滚动平均值(在groupby子句之后)。但是,我想排除NaN。例如,如果groupby返回[2,NaN,1],则结果应为1.5,而当前它返回NaN。我尝试了以下方法,但似乎不起作用:df.groupby(by=['var1'])['value'].apply(pd.rolling_apply,3,lambdax:np.mean([iforiinxifiisnotnp.nanandi!='NaN']))如果我什至尝试这样做:df.groupby(by=['var1'])['value'].apply(pd.rolling_apply,3,lambd
我正在尝试使用groupby来创建一个新的数据框,但我需要多索引保持一致。无论子类别是否存在,我都希望按如下方式创建它:importpandasaspddf=pd.DataFrame({'Cat1':['A','A','A','B','B','B','B','C','C','C','C','C','D'],'Cat2':['A','B','A','B','B','B','A','B','B','B','B','B','A'],'Num':[1,1,1,1,1,1,1,1,1,1,1,1,1]})printdf.groupby(['Cat1','Cat2']).sum()输出如下:Num
我有一个DataFrame,我希望在其上使用groupby,但我正在寻找一些不寻常的函数来进行聚合。我想让每个组中的观察百分比超过某个阈值。例如,阈值为0时,DataFramedf=pd.DataFrame(dict(day=[1,1,1,2,2,2,3,3,3,4],value=[0,4,0,4,0,4,0,4,0,4]))dfdayvalue010114210324420524630734830944应该变成df_group=pd.DataFrame(dict(day=[1,2,3,4],value=[.33,.67,.33,1.0]))df_groupdayvalue010.33
找到一个规范化的数据帧会删除用于分组的列,这样它就不能在后续的分组操作中使用。例如(编辑:更新):df=pd.DataFrame({'a':[1,1,2,3,2,3],'b':[0,1,2,3,4,5]})ab010111222333424535df.groupby('a').transform(lambdax:x)b001122334455现在,对于组上的大多数操作,“缺失”列成为一个新索引(然后可以使用reset_index或设置as_index=False进行调整),但是当使用转换时,它就消失了,留下原始索引和没有key的新数据集。编辑:这是我希望能够做的事情的一个例子df.gr
我将从3个简单的示例开始:pd.DataFrame([[True]]).sum()01dtype:int64pd.DataFrame([True]).sum()01dtype:int64pd.Series([True]).sum()1所有这些都符合预期。这是一个更复杂的例子。df=pd.DataFrame([['a','A',True],['a','B',False],['a','C',True],['b','A',True],['b','B',True],['b','C',False],],columns=list('XYZ'))df.Z.sum()4也符合预期。但是,如果我grou
我有一个看起来像这样的DataFrame...idnvalue0ID1251ID1302ID2303ID250我想在此框架中添加另一列,即按“idn”分组的最大“值”我想要这样的结果。idnvaluemax_val0ID125301ID130302ID230503ID25050我可以像这样使用组来提取“值”的最大值...df[['idn','value']].groupby('idn')['value'].max()但是,我无法将该结果合并回原始DataFrame。获得预期结果的最佳方法是什么?谢谢 最佳答案 对groupby对象使