这似乎很简单,我无法相信我在拉我的头发。 我有一个像这样的pivot_table
Name income expenses 2015 2016 2015 2016 Joe Doe 2 4 5 7 Jane Doe 2 4 5 7 Doe Joe 2 4 5 7 Doe Jane 2 4 5 7
我只想添加一个计算列profit_loss =(收入 - 费用) 我认为它会是这样的:
df['profit_loss'] = df['income'] - df['expenses]
我只会收到错误。
无需为创建此pivot_table的基表编写大量代码或准备工作,是否有更简单的方法来处理pandas pivot_table上的MultiIndexes
?
答案 0 :(得分:0)
您可以先使用sort_index
,因为错误:
KeyError:'MultiIndex Slicing要求索引完全是lexsorted tuple len(2),lexsort depth(0)'
df.sort_index(axis=1, inplace=True)
idx = pd.IndexSlice
a = df.loc[:,idx['income',:]] - df.loc[:,idx['expenses',:]].values
#rename column name
a = a.rename(columns={'income':'profit_loss'})
print (a)
profit_loss
2015 2016
Joe Doe -3 -3
Jane Doe -3 -3
Doe Joe -3 -3
Doe Jane -3 -3
df1 = pd.concat([df,a], axis=1)
print (df1)
expenses income profit_loss
2015 2016 2015 2016 2015 2016
Joe Doe 5 7 2 4 -3 -3
Jane Doe 5 7 2 4 -3 -3
Doe Joe 5 7 2 4 -3 -3
Doe Jane 5 7 2 4 -3 -3
答案 1 :(得分:0)
无需排序,您无需将其分配给多索引中的新列,如下所示:
df['profit_loss','2015'] = df['income','2015'] - df['expenses','2015']
df['profit_loss','2016'] = df['income','2016'] - df['expenses','2016']
虽然这可能会使很多年变得混乱,但是我想如果您需要重复执行此操作,那么您可以创建一个函数并遍历这些年。