gpt4 book ai didi

python - 基于索引对多索引数据进行操作

转载 作者:行者123 更新时间:2023-12-01 08:31:57 28 4
gpt4 key购买 nike

我有一个 2 级多索引(在 X 和 Y 上)数据框,如下所示:

df=(
X1 Y1 Z1
Z2
Y2 Z3
Z3
Z4
X2 Y3 Z5)

我想根据X和Y的值对Z进行一些操作。所以,我写了:

for x in df.index.levels[0]:
for y in df.index.levels[1]:
Do something on Z

但是,无论 X 和 Y 的值如何,我都会得到结果。

如有任何帮助,我们将不胜感激

最佳答案

我使用了多索引 pandas 页面中的设置:

arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
tuples = list(zip(*arrays))
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
s = pd.DataFrame(np.random.randn(8, 4), index=arrays)
print(s)

输出:

                0         1         2         3
bar one -2.252251 -0.655827 1.463011 -0.028378
two 0.764846 0.245175 -0.580668 -1.054938
baz one 1.052068 -0.024946 0.435709 0.067140
two 0.397881 0.658192 -1.178750 -0.137875
foo one 0.168246 0.391718 1.001085 -0.353019
two -0.034458 -1.182889 0.207794 0.275627
qux one -1.236448 0.258419 0.999734 -0.774948
two -0.518770 1.954563 -1.627627 0.436150

0、1、2、3 就是你的“Z”

假设我想访问第二个索引为“一”的每一行,我们可以使用 df.xs():

s.xs('one', level=1)+1

返回(我们向第二个索引 = 'one' 的每一列添加 1):

            0         1         2         3
bar -1.252251 0.344173 2.463011 0.971622
baz 2.052068 0.975054 1.435709 1.067140
foo 1.168246 1.391718 2.001085 0.646981
qux -0.236448 1.258419 1.999734 0.225052

现在假设我想访问第一个索引 = 'bar' 的第二个索引并计算该值的平方:

s.xs('bar', level=0)**2

返回第二个索引“one”和“two”的索引“bar”的平方值:

            0         1         2         3
one 5.072636 0.430109 2.140401 0.000805
two 0.584989 0.060111 0.337175 1.112894

Level=0 对应于您的“X”,level=1 对应于您的“Y”,值对应于您的“Z”。我希望这有帮助!

关于python - 基于索引对多索引数据进行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53876064/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com