1

現在、dataframe_one で計算を行い、dataframe_two で新しい列を作成して結果を入力する必要があります。dataframe_one は複数のインデックスが付けられていますが、2 番目のインデックスはそうではありませんが、dataframe_one のインデックスに一致する列があります。

これは私が現在行っていることです: import pandas as pd import numpy as 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

これを行う簡単な方法はありますか?

乾杯!

4

1 に答える 1

1

私が正しく理解していれば、SQL group_by および集計関数に相当する pandas が必要です。これらは本質的に同じ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
于 2013-11-13T19:32:08.470 に答える