ValueError:无法从重复的轴Pandas重新索引

时间:2017-08-24 21:43:15

标签: python pandas

所以我有一系列基于fund_id生成的时间序列:

var x;

var promise = new Promise(function(resolve,reject) {
    setTimeout(function() {
        x = 3.15;
        resolve();
    },3000)
});

promise.then(function(){
   console.log("code to be executed")
   console.log(x)
});

所以时间序列的样子如下:

<!--#include file="teststring.asp"-->

另一个时间序列:

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 。我是熊猫新手,所以我想知道你们是否有任何建议。

由于

编辑:索引也不应该是唯一的。

1 个答案:

答案 0 :(得分: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,您可以取第一个值),然后取消堆栈fund_id将其作为列进行转移:< / p>

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