python - Pandas:在 Dataframe 中填充新列,其中其他 2 列匹配

标签 python pandas

现在我必须对 dataframe_one 进行计算,然后在 dataframe_two 上创建一个新列并填充结果。 dataframe_one 是多索引的,而第二个不是,但有一些列与 dataframe_one 中的索引匹配。

这就是我目前正在做的事情: 将 pandas 导入为 pd 将 numpy 导入为 np

dataframe_two = {}
dataframe_two['project_id'] = [1, 2]
dataframe_two['scenario'] = ['hgh', 'low']
dataframe_two = pd.DataFrame(dataframe_two)
dataframe_one = {}
dataframe_one['ts_project_id'] = [1, 1, 1, 1, 1, 2, 2, 2, 2, 2]
dataframe_one['ts_scenario'] = ['hgh', 'hgh', 'hgh', 'hgh', 'hgh', 'low', 'low', 'low', 'low', 'low']
dataframe_one['ts_economics_atcf'] = [-2, 2, -3, 4, 5 , -6, 3, -3, 4, 5]
dataframe_one = pd.DataFrame(dataframe_one)
dataframe_one.index = [dataframe_one['ts_project_id'], dataframe_one['ts_scenario']]

project_scenario = zip(dataframe_two['project_id'], dataframe_two['scenario'])
dataframe_two['econ_irr'] = np.zeros(len(dataframe_two.index))
i = 0
for project, scenario in project_scenario:
    # Grabs corresponding series from dataframe_one
    atcf = dataframe_one.ix[project].ix[scenario]['ts_economics_atcf']
    irr = np.irr(atcf.values)
    dataframe_two['econ_irr'][i] = irr
    i = i + 1

print dataframe_two

有更简单的方法吗?

干杯!

最佳答案

如果我理解正确的话,你需要 pandas 等效的 SQL group_by 和聚合函数。它们本质上是相同的,groupby DataFrame 和 aggregate 的方法groupby.SeriesGroupBy 对象的方法。

>>> dataframe_one['ts_economics_atcf'].groupby(level=[0,1]).aggregate(np.irr)
ts_project_id  ts_scenario
1              hgh            0.544954
2              low            0.138952
dtype: float64

关于python - Pandas:在 Dataframe 中填充新列,其中其他 2 列匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19961857/

相关文章:

python - 蒙戈 : avoid duplicate files in gridfs

python - SPSS 语法或 Python : For each value of x, 有多少个不同的 y 值?

python - django 查询集与查询集值不同

python - Dask:系列 getitem 仅支持具有匹配分区结构的其他系列对象 - 错误

python - Pandas 在第 0 个位置插入空行

python - Pandas 条件滚动计数

python - 如何将以下函数应用于多个txt文件?

python - 找不到别名的词法分析器

python - Pandas 以科学计数法读取整数列

python - 使用 pandas 将日期、时间和纳秒解析为日期时间对象