python-3.x - 将 Pandas groupby 与总列和总行一起使用
问题描述
我的代码中使用的 Dataframe 列出了属于所有者的资本和收益金额。目的是按所有者对值进行分组,然后将总计列添加到 groupby 数据框,然后添加全局总计行。
这是代码:
import pandas as pd
OWNER = 'OWNER'
CAPITAL = 'CAPITAL'
YIELD = 'YIELD AMT'
TOTAL = 'TOTAL'
# defining the dataframe
df = pd.DataFrame({OWNER: 2 * ['Joe'] + 3 * ['Carla'] + ['Rob'],
CAPITAL: [10000, 5000, 20000, 3000, -4000, 2000],
YIELD: [1000, 500, 2000, 300, 400, 200]})
'''
OWNER CAPITAL YIELD AMT
0 Joe 10000 1000
1 Joe 5000 500
2 Carla 20000 2000
3 Carla 3000 300
4 Carla -4000 400
5 Rob 2000 200
'''
print(df)
print()
# grouping the rows by owner
dfg = df.groupby([OWNER]).sum().reset_index()
'''
OWNER CAPITAL YIELD AMT
0 Carla 19000 2700
1 Joe 15000 1500
2 Rob 2000 200
'''
print(dfg)
print()
# adding a TOTAL column
for index in range(0, len(dfg)):
dfg.loc[index, TOTAL] = dfg.loc[index, CAPITAL] + dfg.loc[index, YIELD]
'''
OWNER CAPITAL YIELD AMT TOTAL
0 Carla 19000 2700 21700.0
1 Joe 15000 1500 16500.0
2 Rob 2000 200 2200.0
'''
print(dfg)
print()
# resetting index to OWNER column
dfg = dfg.set_index(OWNER)
'''
CAPITAL YIELD AMT TOTAL
OWNER
Carla 19000 2700 21700.0
Joe 15000 1500 16500.0
Rob 2000 200 2200.0
'''
print(dfg)
print()
# finally, adding a TOTAL row
dfg.loc[TOTAL] = dfg.sum(numeric_only=True, axis=0)[[CAPITAL, YIELD, TOTAL]]
'''
CAPITAL YIELD AMT TOTAL
OWNER
Carla 19000.0 2700.0 21700.0
Joe 15000.0 1500.0 16500.0
Rob 2000.0 200.0 2200.0
TOTAL 36000.0 4400.0 40400.0
'''
print(dfg.fillna(''))
我的问题是:是否有更简洁的方法来使用 Pandas agg() 或 aggregate() 和 lambda 表达式对总列或行计算进行编码?
解决方案
df[TOTAL] = df[CAPITAL] + df[YIELD]
output = df.groupby(by=[OWNER]).sum()
就是你要找的。output
是您需要的数据框。
推荐阅读
- unix - 是否有转储所有 X 服务器信息的示例 X-Windows 应用程序?
- c++ - 如果我知道每个索引处的字符(在 C++ 中),我如何创建一个字符串
- node.js - 如何为 MongoDB 错误启用控制台日志记录?
- c - 分段错误和取消引用指针
- xml - Layman 使用 //、/ 和 local-name() 对 XPath 的解释?
- python - 正则表达式在字符之间仅包含一位数字
- powershell - VS Code Powershell 切换用户
- php - 按钮中的数组值,PHP Laravel 框架
- asp.net-core - 在 ASP.NET Core 3.0 中向 AspNetUserRoles 表添加自定义列 - ASP.NET Core IDENTITY
- c++ - C++:C类没有命名类型(新场景)3个类