草庐IT

groupby-apply

全部标签

python - Pandas Groupby 一致的水平,即使是空的

我正在尝试使用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

python - Pandas groupby : percentage above threshold

我有一个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

python - 在 pandas 中使用带有转换的 groupby 时保留 'key' 列

找到一个规范化的数据帧会删除用于分组的列,这样它就不能在后续的分组操作中使用。例如(编辑:更新):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

python - 如何使用天数作为 pandas rolling_apply 函数的窗口

我有一个日期间隔不规则的Pandas数据框。有没有办法用7天作为移动窗口来计算medianabsolutedeviation,中位数等..?我觉得我可以以某种方式使用pandas.rolling_apply但它不会为window参数采用不规则间隔的日期。我找到了类似的帖子https://stackoverflow.com/a/30244019/3128336并且我正在尝试创建我的自定义函数,但仍然无法弄清楚..任何人都可以帮忙吗?importpandasaspdfromdatetimeimportdatetimeperson=['A','B','C','B','A','C','A','

python - 为什么 groupby sum 不将 boolean 转换为 int 或 float?

我将从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

python - 将 pandas groupby 结果合并回 DataFrame

我有一个看起来像这样的DataFrame...idnvalue0ID1251ID1302ID2303ID250我想在此框架中添加另一列,即按“idn”分组的最大“值”我想要这样的结果。idnvaluemax_val0ID125301ID130302ID230503ID25050我可以像这样使用组来提取“值”的最大值...df[['idn','value']].groupby('idn')['value'].max()但是,我无法将该结果合并回原始DataFrame。获得预期结果的最佳方法是什么?谢谢 最佳答案 对groupby对象使

python - 如何在不添加额外索引的情况下使用 Pandas groupby apply()

我经常想通过组合分组DataFrame的多个列来创建一个新的DataFrame。apply()函数允许我这样做,但它要求我创建一个不需要的索引:In[359]:df=pandas.DataFrame({'x':3*['a']+2*['b'],'y':np.random.normal(size=5),'z':np.random.normal(size=5)})In[360]:dfOut[360]:xyz0a0.201980-0.4703881a0.190846-2.0890322a-1.1310100.2278593b-0.263865-1.9065754b-1.335956-0.722

使用 rolling_apply 的 Python 自定义函数用于 pandas

我想使用pandas.rolling_apply函数在滚动窗口的基础上应用我自己的自定义函数。但是我的函数需要两个参数,并且还有两个输出。这可能吗?下面是一个最小的可重现示例...importpandasaspdimportnumpyasnpimportrandomtmp=pd.DataFrame(np.random.randn(2000,2)/10000,index=pd.date_range('2001-01-01',periods=2000),columns=['A','B'])defgm(df,p):v=(((df+1).cumprod())-1)*preturnv.iloc[

python - 如何将多个参数传递给 apply 函数

我有一个名为counting的方法,它有两个参数。我需要使用apply()方法调用此方法。但是,当我将这两个参数传递给apply方法时,出现以下错误:TypeError:counting()takesexactly2arguments(1given)我看到了以下帖子pythonpandas:applyafunctionwithargumentstoaseries.Update而且我不想使用functool.partial,因为我不想导入其他类来传递参数。defcounting(dic,strWord):ifstrWordindic:returndic[strWord]else:retu

python - 从 Pandas Groupby Dataframe 创建等高线图

我有以下Pandas数据框:In[66]:hdf.size()Out[66]:ab00.0210040.11199030.21865790.34173490.42027230.51009060.6563860.760800.835960.923911.019631.117301.216631.316141.41309...1860.2150.390.4210.541870.230.3100.4220.5101880.0110.1190.2200.3130.470.550.61Length:4572,dtype:int64你看,a从0...188和b在每个组中从某个值到某个值。并且作为指