2017-08-24 8 views
1

のインデックスを再作成することはできませんので、私はfund_idに基づいて生成されtimeseries`の配列している:とValueError:重複軸パンダから

def get_adj_nav(self, fund_id): 
    df_nav = read_frame(
     super(__class__, self).filter(fund__id=fund_id, nav__gt=0).exclude(fund__account_class=0).order_by(
      'valuation_period_end_date'), coerce_float=True, 
     fieldnames=['income_payable', 'valuation_period_end_date', 'nav', 'outstanding_shares_par'], 
     index_col='valuation_period_end_date') 
    df_dvd, skip = self.get_dvd(fund_id=fund_id) 
    df_nav_adj = calculate_adjusted_prices(
     df_nav.join(df_dvd).fillna(0).rename_axis({'payout_per_share': 'dividend'}, axis=1), column='nav') 
return df_nav_adj 

def json_total_return_table(request, fund_account_id): 
ts_list = [] 
for fund_id in Fund.objects.get_fund_series(fund_account_id=fund_account_id): 
    if NAV.objects.filter(fund__id=fund_id, income_payable__lt=0).exists(): 
     ts = NAV.objects.get_adj_nav(fund_id)['adj_nav'] 
     ts.name = Fund.objects.get(id=fund_id).account_class_description 
     ts_list.append(ts.copy()) 
     print(ts) 
    df_adj_nav = pd.concat(ts_list, axis=1) # ====> Throws error 
    cols_to_datetime(df_adj_nav, 'index') 
    df_adj_nav = ffn.core.calc_stats(df_adj_nav.dropna()).to_csv(sep=',') 

だから、時系列がどのように見えるかの例がこれです:

valuation_period_end_date 
2013-09-03 17.234000 
2013-09-04 17.277000 
2013-09-05 17.363000 
2013-09-06 17.326900 
2013-09-09 17.400800 
2013-09-10 17.473000 
2013-09-11 17.486800 
2013-09-12 17.371600 
.... 
Name: CLASS I, Length: 984, dtype: float64 

別の時系列:それぞれについて、

valuation_period_end_date 
2013-09-03 17.564700 
2013-09-04 17.608500 
2013-09-05 17.696100 
2013-09-06 17.659300 
2013-09-09 17.734700 
2013-09-10 17.808300 
2013-09-11 17.823100 
2013-09-12 17.704900 
.... 
Name: CLASS F, Length: 984, dtype: float64 

は長さが異なっていて、私は疑問に思って時系列それがエラーの理由であれば、私は得ています:cannot reindex from a duplicate axis。私はパンダには新しいので、皆さんに助言があるかどうか疑問に思っていました。

おかげ

EDIT:また、インデックスが一意であることが想定されていません。

答えて

1

おそらくこのようなものが動作します。私はfund_idをデータフレームに追加し、valuation_period_end_datefund_idに再インデックスしました。

# Only fourth line above error. 
ts = (
    NAV.objects.get_adj_nav(fund_id['adj_nav'] 
    .to_frame() 
    .assign(fund_id=fund) 
    .reset_index() 
    .set_index(['valuation_period_end_date', 'fund_id'])) 

そしてaxis=0を積み重ね、その後、日付とfund_id上のグループ(日付とfund_idごとに1つだけのユニークな値があると仮定すると、あなたが最初の値を取ることができます)、列としてそれを旋回するようにfund_idスタックを解除:

df_adj_nav = (
    pd.concat(ts_list, axis=0) 
    .groupby(['valuation_period_end_date', 'fund_id']) 
    .first() 
    .to_frame() 
    .unstack('fund_id')) 
+0

エラー: 'シリーズ'オブジェクトに属性 '割り当て'がありません – anderish

+0

上記の編集を参照してください。シリーズからデータフレームに変換するには 'to_frame()'を使います。 – Alexander

+0

例外:一意でない複数のインデックスを処理できません! – anderish

関連する問題