Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多索引数据框中两列之间的差异_Python_Pandas_Dataframe - Fatal编程技术网

Python 多索引数据框中两列之间的差异

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

我有一个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.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。谢谢你加上这个