python - Pandas DataFrames:使用跨现有行的计算创建新行
问题描述
如何通过按某些字段(例如“国家”和“行业”)分组并将一些数学应用于另一个字段(例如“字段”和“值”)从现有 DataFrame 创建新行?
源数据框
df = pd.DataFrame({'Country': ['USA','USA','USA','USA','USA','USA','Canada','Canada'],
'Industry': ['Finance', 'Finance', 'Retail',
'Retail', 'Energy', 'Energy',
'Retail', 'Retail'],
'Field': ['Import', 'Export','Import',
'Export','Import', 'Export',
'Import', 'Export'],
'Value': [100, 50, 80, 10, 20, 5, 30, 10]})
Country Industry Field Value
0 USA Finance Import 100
1 USA Finance Export 50
2 USA Retail Import 80
3 USA Retail Export 10
4 USA Energy Import 20
5 USA Energy Export 5
6 Canada Retail Import 30
7 Canada Retail Export 10
目标数据框
净额 = 进口 - 出口
Country Industry Field Value
0 USA Finance Net 50
1 USA Retail Net 70
2 USA Energy Net 15
3 Canada Retail Net 20
解决方案
很可能有很多方法。这是一个使用groupby
and unstack
:
(df.groupby(['Country', 'Industry', 'Field'], sort=False)['Value']
.sum()
.unstack('Field')
.eval('Import - Export')
.reset_index(name='Value'))
Country Industry Value
0 USA Finance 50
1 USA Retail 70
2 USA Energy 15
3 Canada Retail 20
推荐阅读
- r - FUN(X[[i]], ...) 中的错误:带刺的参数的“类型”(字符)无效
- javascript - 为什么我在 vue.config.js 中的代码不起作用?
- python - 如果 N 是一个数组并且 N[1][i] 在 for 循环中,N[1][i] 会做什么?我无法理解
- mysql - 如何将登录页面中的 user_id 传递到两个不同的页面,例如用户和所有者产品的所有者页面
- c# - 我在报表设计器上看不到我的新数据
- javascript - 如何在不使用全局变量的情况下从 JavaScript 中的嵌套 For 循环返回变量?
- image - 用'abs'和numpy反转图像
- javascript - 当我对我的对象进行动态解构时,React 返回一个意外的令牌错误
- c++ - 使用 asio 和 c++ 异步接受 ssl 套接字
- c# - Oscova 自定义实体问题