首页 > 解决方案 > Pandas groupby 数据框然后返回单值结果(总和,总计)

问题描述

亲爱的,

请帮助我,我被卡住了。我想这应该不难,但我感到不知所措。

需要对应收账款进行老化,因此必须将它们分开在不同的桶中。

假设我们只有 3 个组:currentabove_10Daysabove_20Days以及下表:

d = {'Cust': [Dfg, Ers, Dac, Vds, Mhf, Kld, Xsd, Hun], 
'Amount': [10000, 100000, 4000, 5411, 756000, 524058, 4444785, 54788,
'Days': 150, 21, 30, 231, 48, 15, -4, -14 }

在此处输入图像描述

我需要根据老化组将金额分组为总和。示例:当前:4499573 等。

为此,我尝试使用以下代码对应收账款进行分组:

 above_10Days = df.groupby((df['Days'] > 0) & (df['Days'] <= 10))
 above10sum = above_10Days.Amount.sum().iloc[1]

它可以完美运行,但仅当它们是该组中的实际数量时。当它们不是这样的 A/R 时,它会引发异常并停止执行。我尝试使用函数或将“无”值设为 0,但没有成功。

希望有人可以知道解决方案。

提前致谢

标签: python-3.xpandasnumpy

解决方案


国际大学联盟:

d = {'Cust': ['Dfg', 'Ers', 'Dac', 'Vds', 'Mhf', 'Kld', 'Xsd', 'Hun'], 
'Amount': [10000, 100000, 4000, 5411, 756000, 524058, 4444785, 54788],
'Days': [150, 21, 30, 231, 48, 15, -4, -14] }

df = pd.DataFrame(d)

#Updated to assign to output dataframe
df_out = (df.groupby(pd.cut(df.Days,
                  [-np.inf,10,20,np.inf],
                  labels=['Current','Above 10 Days','Above 20 Days']))['Amount']
  .sum())

输出:

Days
Current          4499573
Above 10 Days     524058
Above 20 Days     875411
Name: Amount, dtype: int64

变量赋值使用.loc

varCurrent = df_out.loc['Current']
var10 = df_out.loc['Above 10 Days']
var20 = df_out.loc['Above 20 Days']
print(varCurrent,var10,var20)

输出:

4499573 524058 875411

推荐阅读