[英]difference between 2 columns in Pandas Dataframe with multiindex
我有一个 Pandas DataFrame,它的列是 MultiIndex,有 2 个级别,如下所示:
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 = t['today'] - t['yesterday']
将返回我感兴趣的底层 DataFrame,但我无法弄清楚如何将它正确放置在整个 DataFrame 中
就像是:
pd.concat([df,diff],axis=1)
产生一个有趣(但不正确)的结果
一种方法是将diff
的列设为MultiIndex
例如:
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
编辑:另一种不使用MultiIndex
是直接执行创建列的操作:
df[[('diff','travel'),('diff','food')]] = df['today'] - df['yesterday']
以及更通用的方法,您可以使用get_level_values
df[[('diff',col) for col in df.columns.get_level_values(1).unique()]] = df['today'] - df['yesterday']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.