这是我一直在使用的常见模式:
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" /最快/最可读的方式是什么?
谢谢!
答案 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循环解决方案是最好的。