python - 循环此数据框的更有效方法?
问题描述
我有一个包含以下内容的大数据集:
列:年份、国家、项目、元素、价值和其他有 15 年,200 个国家,23 个项目。
比如说:
Year Country Item Element Value
2011 Afghanistan Carbohydrates Export 123
2012 Afghanistan Stones Export 12314
2013 Afghanistan Batteries Import 5424
到目前为止,我已经这样做了:
for year in database["Year"].unique():
for country in database["Country"].unique():
for item in database["Item"].unique():
newrow = {"Element": database.loc[(database["Country"] == country) & (database["Year"] == year) & (database["Item"] == item) & (database["Element"] == "Import")].Value.item()/database.loc[(database["Country"] == country) & (database["Year"] == year) & (database["Item"] == item) & (database["Element"] == "Export").Value.item()}
database = database.append(newrow, ignore_index=True)
有没有办法更有效地做到这一点?
O(x y z) 对我来说似乎太高了。
编辑:预期输出:
Year Country Item Element Value
2011 Afghanistan Carbohydrates Export 123
2012 Afghanistan Stones Export 12314
2013 Afghanistan Batteries Import 5424
2011 Afghanistan Carbohydrates Export/Import Rate 123/23123
对于每一年,国家和项目。
解决方案
创建导出和导入数据框
df_import = df[ df['Element'] == 'Import' ]
df_export = df[ df['Element'] == 'Export' ]
将它们在 Year、Country 和 Item 上合并到一个新的 DataFrame 中。你可以称它为 df_exim。
df_exim = pd.merge(df_import, df_export, on=['Year', 'Country', 'Item'])
创建一个名为 Rate 的新列
df_exim['Rate'] = df_exim['Export'] / df_exim['Import']
推荐阅读
- python - 将“美化”JSON读回python
- javascript - 反应菜单组件
- python - 值更改后Tensorflow找不到变量?
- apache - 从 http 重定向到 https 时,从 url 中删除斜线
- python - 从忽略 NaT 的 pandas 数据框中获取 datetime.date 的最小值/最大值
- python - 使用标志提取文本以使用 PyMUPDF 专注于粗体/斜体字体
- eclipse - Mac系统tomcat服务器如何设置log4j日志文件
- node.js - 带有 socket.io 命名空间问题的 NodeJS 集群
- javascript - Big Sur 更新后找不到 tools.jar
- kubernetes - 如何使用 Kubernetes 作为代理使 http://ip:port 可以通过 https://domain/suffix 访问?