Pandas 使用索引名称和列名称应用函数

Pandas apply a function using index name and column name

考虑数据框:

data = pd.DataFrame(0, index=[1,2,3,4], columns=[1,2,3,4])
data    
    1   2   3   4
1   0   0   0   0
2   0   0   0   0
3   0   0   0   0
4   0   0   0   0

我想使用带有两个参数的函数来填充值。这两个参数将是数据帧的索引名称和列名称。我怎样才能做到这一点(使用矢量化)?

def multiply(a, b):
    return a * b

我一直在尝试 data.apply(lambda x: x.apply(multiply, args=(x.name))) 的各种组合,但无法实现。

非常感谢任何帮助。

如果使用 apply 引擎盖下有循环,所以不是 vecorized 解决方案,如果需要按列名称进行多个索引,请使用 numpy 解决方案,如:

a = data.index.to_numpy() * data.columns.to_numpy()[:, None]
print (a)
[[ 1  2  3  4]
 [ 2  4  6  8]
 [ 3  6  9 12]
 [ 4  8 12 16]]

data[:] = data.index.to_numpy() * data.columns.to_numpy()[:, None]
print (data)
   1  2   3   4
1  1  2   3   4
2  2  4   6   8
3  3  6   9  12
4  4  8  12  16

您可以使您的代码工作,使用:

def multiply(a, b):
    return a * b

df = df.apply(lambda x: multiply(x.index, x.name))