有没有什么方法可以得到三维pandas dataframe postpivot

mnemlml8  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(140)

下面,如果我的代码,Post pivoting我得到了一个501行x 505列的 Dataframe 。有可能得到501行X 101列X 5深度在深度中容纳对应于x轴和y轴值的不同值吗?基本上,我想检索所有的值(value,value_2 ..._给定x轴和y轴)(例如,x轴为15,y轴为20应该给出[value,value_2,...,value_5]。**理想情况下,如果它可以是三维的,我可以使用x轴、y轴和值的另一个索引来检索,例如15、20、2将给予x轴的值15、y轴的值20和value_3的值。

import pandas as pd 
import numpy as np 
from itertools import product

x_axis = np.arange(0, 501)
y_axis = np.arange(0, 101)

combinations = list(product(x_axis, y_axis))

np.random.seed(42) 
values = np.random.randint(0, 11, len(combinations)) 
values_2 = np.random.randint(0, 11, len(combinations)) 
values_3 = np.random.randint(0, 11, len(combinations)) 
values_4 = np.random.randint(0, 11, len(combinations)) 
values_5 = np.random.randint(0, 11, len(combinations))

df = pd.DataFrame(combinations, columns=['x-axis', 'y-axis'])
df['value'] = values 
df['value_2'] = values_2 
df['value_3'] = values_3 
df['value_4'] = values_4 
df['value_5'] = values_5

pivot_df = df.pivot(index='x-axis', columns='y-axis')

预期成果:pivot_df为501行X 101列X5深度这样我就可以为给定的x_axis和y_axis拉取value_3

kkbh8khc

kkbh8khc1#

理想情况下,如果它可以被制作成三维的,我可以使用x轴,y轴和另一个索引来检索值,例如15202将给出x轴的值15,y轴的值20和value_3的值。
您可以使用:

val_cols = pivot_df.columns.get_level_values(0).unique()

X, Y1, Y2 = 15, 20, 2

out = pivot_df.loc[X, pd.IndexSlice[val_cols[Y2], Y1]]
#returns `2`
  • 老答案:*

你可以loc用给定的X/Y * 坐标 * 生成IndexSlice

X = 10
Y = 20
​
out = pivot_df.loc[[X], pd.IndexSlice[:, Y]] # `X` instead of `[X]` IYW a Series

输出:

print(out)

       value value_2 value_3 value_4 value_5
y-axis    20      20      20      20      20
x-axis                                      
10         3       3       7       0       4

相关问题