在Pandas多索引横截面切片中设置值

tyky79it  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(143)

我想将横截面的值设置为相对于平均值的值。下面的代码将这些值设置为空,但我希望这些值为-5和5。有没有一种简单易读的方法可以做到这一点,而不必循环遍历索引中的每一列?

import pandas as pd

x = pd.DataFrame({'a': [1, 2, 3], 'b': [1, 2, 3]})
y = pd.DataFrame({'a': [11, 12, 13], 'b': [21, 22, 23]})

df = pd.concat({'x': x, 'y': y}, axis=1)

timeslice = df.loc[1, (slice(None), 'a')].values.flatten()
timeslice = timeslice[~np.isnan(timeslice)]
average = np.mean(timeslice)
df.loc[1, (slice(None), 'b')] = df.loc[1, (slice(None), 'a')] - average
x        y
   a    b   a     b
0  1  1.0  11  21.0
1  2  NaN  12   NaN
2  3  3.0  13  23.0
yzuktlbb

yzuktlbb1#

问题是你的索引对齐。你的两个切片没有对齐导致一个NaN。
use:

df.loc[1, (slice(None), 'b')] = df.loc[1, (slice(None), 'a')].to_numpy() - average

输出:

x      y    
   a  b   a   b
0  1  1  11  21
1  2 -5  12   5
2  3  3  13  23

相关问题