我想使用pandas数据帧来创建一个二维表。该表应将两个值alpha
和epsilon
与第三个值相关联。 alpha
和epsilon
来自可变范围,例如:
alphaRange = numpy.arange(0.01, 0.26, 0.01)
epsilonRange = numpy.arange(0.01, 0.11, 0.01)
(目标是找出alpha
和epsilon
的哪种组合导致最高值,或者更一般地说,找出参数和值之间的相关性。)
构建这样一个数据帧然后用值填充它的最佳方法是什么?
答案 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是对的 - 浮点数不能制作好的列或索引标签,因为它们很难正确引用。 (检查浮点数是否相等会导致浮动表示问题。)因此,最好使alpha
和epsilon
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']))