首页 > 解决方案 > 循环此数据框的更有效方法?

问题描述

我有一个包含以下内容的大数据集:

列:年份、国家、项目、元素、价值和其他有 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

对于每一年,国家和项目。

标签: pythonpandasalgorithmdataframe

解决方案


创建导出和导入数据框

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']

推荐阅读