Python pandas,将数据帧转换为多索引';数据帧

Python pandas,将数据帧转换为多索引';数据帧,python,pandas,numpy,multidimensional-array,dataframe,Python,Pandas,Numpy,Multidimensional Array,Dataframe,我有一个pandas.DataFrame,我想把它转换成multi-indexedpandas.DataFrame import numpy import pandas import itertools xs = numpy.linspace(0, 10, 100) ys = numpy.linspace(0, 0.1, 20) zs = numpy.linspace(0, 5, 200) def func(x, y, z): return x * y / z vals = lis

我有一个
pandas.DataFrame
,我想把它转换成
multi-index
ed
pandas.DataFrame

import numpy
import pandas
import itertools

xs = numpy.linspace(0, 10, 100)
ys = numpy.linspace(0, 0.1, 20)
zs = numpy.linspace(0, 5, 200)

def func(x, y, z):
    return x * y / z

vals = list(itertools.product(xs, ys, zs))
result = [func(x, y, z) for x, y, z in vals]

# Original DataFrame.
df = pandas.DataFrame(vals, columns=['x', 'y', 'z'])
df = pandas.concat((pandas.DataFrame(result, columns=['result']), df), axis=1)

# I want to turn `df` into this `df2`.
index = pandas.MultiIndex.from_tuples(vals, names=['x', 'y', 'z'])
df2 = pandas.DataFrame(result, columns=['result'], index=index)
注意,在这个例子中,我创建了我想要的和我拥有的

因此,IRL我将从
df
开始,并希望将其转换为
df2
(并且无法访问
vals
result
),我如何做到这一点?

您需要:

如果需要比较两个
数据帧
,需要将
NaN
替换为相同的值,否则得到
False

print (df.set_index(['x','y','z']).eq(df2).all())
result    False
dtype: bool

print (np.nan == np.nan)
False

print (df.fillna(1).set_index(['x','y','z']).eq(df2.fillna(1)).all())
result    True
dtype: bool

对于非数值,我们可以这样做吗?像索引
x
y
列中第一个值之后的所有公共值都有空格吗?@MurtazaHaji-你认为
x,y
下的空字符串是答案吗?这只是为了展示
print (df.set_index(['x','y','z']).eq(df2).all())
result    False
dtype: bool

print (np.nan == np.nan)
False

print (df.fillna(1).set_index(['x','y','z']).eq(df2.fillna(1)).all())
result    True
dtype: bool