我想在下面的df1中添加一个列SUM。它是一个Datetime MultiIndex,新列SUM应该返回价格的总和 行。
multex = pd.MultiIndex.from_product([['price',
'weight','quantity','portfolio'] ,df1.index],names=['Date', 'Stats'])
new_df = pd.DataFrame(index=multex, columns= df1.columns.values.tolist())
随后想要添加一行SUM,它返回相同的值。到目前为止,我已尝试过以下内容:
df1['SUM']= df1.ix['price'].sum(axis=1)
A B C D E
2006-04-28 00:00:00
price 69.62 69.62 6.518 65.09 69.62
weight
std
2006-05-01 00:00:00
price 71.5 71.5 6.522 65.16 71.5
weight
std
2006-05-02 00:00:00
price 72.34 72.34 6.669 66.55 72.34
weight
std
答案 0 :(得分:3)
您可以先使用DataFrame.sort_index
,因为错误:
KeyError:' MultiIndex Slicing要求索引完全是lexsorted tuple len(2),lexsort depth(1)'
然后使用slicers:
df1 = df1.sort_index()
idx = pd.IndexSlice
df1['SUM'] = df1.loc[idx[:,'price'],:].sum(axis=1)
print (df1)
A B C D E SUM
Date Stats
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62 280.468
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50 286.182
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34 290.239
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN
df1['SUM'] = df1.loc[(slice(None), slice('price')),:].sum(axis=1)
print (df1)
A B C D E SUM
Date Stats
2006-04-28 00:00:00 price 69.62 69.62 6.518 65.09 69.62 280.468
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN
2006-05-01 00:00:00 price 71.50 71.50 6.522 65.16 71.50 286.182
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN
2006-05-02 00:00:00 price 72.34 72.34 6.669 66.55 72.34 290.239
std NaN NaN NaN NaN NaN NaN
weight NaN NaN NaN NaN NaN NaN