如何从索引和两个变量函数创建一个pandas DataFrame?

时间:2016-03-20 03:59:29

标签: python numpy pandas

这是我一直在使用的常见模式:

rows = ['Joe','Amy','Tom']
columns = ['account_no', 'balance']

def f(row, column):
    '''Fetches value from database'''
    return np.random.random()

pd.DataFrame([[f(row, column) for column in columns] for  row in rows], index=rows, columns=columns)

如果行和列是数字,我也可以使用np.meshgrid:

rows = [1,2,3]
columns = [4,5]

pd.DataFrame(np.vectorize(f)(xs, ys), index=rows, columns=columns)

我的问题是,在一般情况下,最优雅的/ Pythonic /" pandasic" /最快/最可读的方式是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

这样做可以将您的函数转换为ufunc,然后使用outer

import numpy as np
uf = np.frompyfunc(f, 2, 1) # f has 2 inputs, 1 outputs
pd.DataFrame(uf.outer(rows, columns), index=rows, columns=columns)

上面提到的一个标准是“最具可读性”。对于我说你现有的for循环解决方案是最好的。