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))
考虑数据框:
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))