Python - Pandas - 减去索引列中的子列

标签 python pandas multi-index operation

有没有一种简单的 Sub 方法,就像我在下面做 Sum 一样?

换句话说,我想在每个索引列中减去它的两个子列。

import pandas as pd
arrays = [np.array(['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux']),
          np.array(['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two'])]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
df = pd.DataFrame(np.random.randn(3, 8), index=['A', 'B', 'C'], columns=index)
df.sum(level=0, axis=1)

我发现最后一行非常优雅,但显然,这不起作用......:

df.sub(level = 0,axis=1)

最佳答案

您需要xs用于选择 MultiIndexsub 的每个级别:

print (df.xs('one', level=1, axis=1).sub(df.xs('two', level=1, axis=1)))
first       bar       baz       foo       qux
A      0.511199  1.684088 -1.377296  1.818127
B      0.421159  0.477186  0.777098 -1.265297
C      0.512711  2.262646 -0.435340  1.400147

关于Python - Pandas - 减去索引列中的子列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48967033/

相关文章:

python - 使用选择的 5*5 网格和范围字符串转换 DataFrame

python - 如何用 Python 中的公式替换查看先前值的循环

python - 在 Pandas 中将两个 MultiIndex 级别合并为一个级别

ruby-on-rails - Elasticsearch more_like_this查询异常

python - Celery是否使用链和组组合的结果后端?

python - 如何在 django 中执行...重复 key 更新...

python - 一个人可以使用 Cython 编写一个库 API——一个可以在 Python 之外访问的 API 吗?

python - 比较不同形状的矩阵

python - 在 colab 中找到 pd.head() 的选项

python - pandas DataFrame 从 MultiIndex 日期索引中获取每年的第一天