Python 多索引数据框中两列之间的差异
我有一个Pandas数据框,它的列是多索引的,有两个级别,如下所示:Python 多索引数据框中两列之间的差异,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个Pandas数据框,它的列是多索引的,有两个级别,如下所示: index = ['monday','tuesday','wednesday'] tuples = [('yesterday','travel'),('yesterday','food'),('today','travel'),('today','food')] columns = pd.MultiIndex.from_tuples(tuples,names=[None,'category']) df = pd.DataFra
index = ['monday','tuesday','wednesday']
tuples = [('yesterday','travel'),('yesterday','food'),('today','travel'),('today','food')]
columns = pd.MultiIndex.from_tuples(tuples,names=[None,'category'])
df = pd.DataFrame(np.random.randint(low=0, high=10, size=(3, 4)), index=index, columns=columns)
我只想将“旅行”和“食物”列的差异存储到一个新的顶级列中,例如“diff”,紧挨着“昨天”和“旅行”
diff = t['today'] - t['yesterday']
将返回我感兴趣的底层数据帧,但我不知道如何将其正确放置在整个数据帧中
比如:
pd.concat([df,diff],axis=1)
产生有趣(但不正确)的结果一种方法是将
diff
的列作为多索引
,例如:
diff = df['today'] - df['yesterday']
diff.columns = pd.MultiIndex.from_tuples([('diff',col) for col in diff.columns])
然后,当您使用concat
时,它会给出:
print (pd.concat([df,diff],axis=1))
yesterday today diff
category travel food travel food travel food
monday 8 7 7 1 -1 -6
tuesday 1 3 0 8 -1 5
wednesday 6 4 5 6 -1 2
编辑:不使用多索引的另一种方法是直接执行创建列的操作:
df[[('diff','travel'),('diff','food')]] = df['today'] - df['yesterday']
更一般的方法是,您可以使用get\u level\u值
df[[('diff',col) for col in df.columns.get_level_values(1).unique()]] = df['today'] - df['yesterday']
我一直坐在这里想知道如何做方法2。谢谢你加上这个