python-3.x - Pandas groupby 数据框然后返回单值结果(总和,总计)
问题描述
亲爱的,
请帮助我,我被卡住了。我想这应该不难,但我感到不知所措。
需要对应收账款进行老化,因此必须将它们分开在不同的桶中。
假设我们只有 3 个组:current、above_10Days和above_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,但没有成功。
希望有人可以知道解决方案。
提前致谢
解决方案
国际大学联盟:
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
推荐阅读
- angular - 如何使我的 ngx-line-chart 响应式?
- javascript - 标签不适用于 Android 设备上的电子邮件
- angularjs - 'topFunction' 已声明但其值从未被读取
- mysql - 如果父表中的行被删除,如何从子表中自动删除行
- javascript - 滑动、延迟然后自动滑出的弹出窗口
- python - Django:补丁和发布需要管理员批准
- java - Hibernate Search OneToMany 混淆结果
- bash - 获取从 glob 扩展返回的文件的完整路径
- java - 如何将此峰度公式从 java 文档转换为 Ruby?
- python - .get + dict 变量