Pandas:如何使用数字范围构造包含列和行键的表

时间:2014-05-12 14:02:51

标签: python pandas dataframe

我想使用pandas数据帧来创建一个二维表。该表应将两个值alphaepsilon与第三个值相关联。 alphaepsilon来自可变范围,例如:

alphaRange = numpy.arange(0.01, 0.26, 0.01)
epsilonRange = numpy.arange(0.01, 0.11, 0.01)

(目标是找出alphaepsilon的哪种组合导致最高值,或者更一般地说,找出参数和值之间的相关性。)

构建这样一个数据帧然后用值填充它的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

首先使用NumPy计算值可能更容易,然后将结果加载到DataFrame中:

import numpy as np
import pandas as pd
alphaRange = np.arange(0.01, 0.26, 0.01)
epsilonRange = np.arange(0.01, 0.11, 0.01)
X, Y = np.meshgrid(alphaRange, epsilonRange)
vals = X+Y
print(vals.shape)
df = pd.DataFrame(vals, index=epsilonRange, columns=alphaRange)
print(df)

编辑:PaulH是对的 - 浮点数不能制作好的列或索引标签,因为它们很难正确引用。 (检查浮点数是否相等会导致浮动表示问题。)因此,最好使alphaepsilon DataFrame列:

df = pd.DataFrame({'vals':vals.ravel()},
                  index=pd.MultiIndex.from_product([alphaRange, epsilonRange],
                                                   names=['alpha', 'epsilon']))
df.reset_index(inplace=True)
print(df.head())

产量

   alpha  epsilon  vals
0   0.01     0.01  0.02
1   0.01     0.02  0.03
2   0.01     0.03  0.04
3   0.01     0.04  0.05
4   0.01     0.05  0.06

[5 rows x 3 columns]

pd.MultiIndex.from_product已添加到pandas 0.13.1中。对于早期版本的pandas,您可以使用:

def from_product(iterables, sortorder=None, names=None):
    from pandas.tools.util import cartesian_product
    product = cartesian_product(iterables)
    return pd.MultiIndex.from_arrays(product, sortorder=sortorder,
                                  names=names)

df = pd.DataFrame({'vals':vals.ravel()},
                  index=from_product([alphaRange, epsilonRange],
                                     names=['alpha', 'epsilon']))