gpt4 book ai didi

python - 如何将函数应用于数据框中的每个元素?

转载 作者:行者123 更新时间:2023-12-05 02:03:15 30 4
gpt4 key购买 nike

这可能是一个非常基本的问题,但我在其他问题中找不到答案。我有两个用于创建 2D 数据框的列表,比方说:

X= np.arange(0, 2.01, 0.25)
Y= np.arange(10, 30, 5.0)

df = pd.DataFrame(index = X, columns = Y)
print(df)

给出:

     10.0 15.0 20.0 25.0
0.00 NaN NaN NaN NaN
0.25 NaN NaN NaN NaN
0.50 NaN NaN NaN NaN
0.75 NaN NaN NaN NaN
1.00 NaN NaN NaN NaN
1.25 NaN NaN NaN NaN
1.50 NaN NaN NaN NaN
1.75 NaN NaN NaN NaN
2.00 NaN NaN NaN NaN

我想遍历数据框中的所有元素,并使用 XY 的值作为某些函数的输入,foo ,我写的。例如,在第 2 行第 1 列(使用零索引)位置我有 (X, Y) = (0.5, 15.0),所以在这个位置我想应用 foo (0.5, 15.0) 而不是 foo(2, 1)

我想我应该能够以某种方式使用 df.apply()df.applymap() 但我想不出来!

最佳答案

由于您的问题需要访问 df 的索引和列标签,您可能需要 df.apply()

df.apply() 可以访问代表每一行/列的 pandas.Series(取决于 axis 参数值)并且您将有权访问列名和索引;而 df.applymap() 在运行时使用 df 的每个单独值 - 因此您不一定能够按要求访问索引和列名。

示例

import numpy as np
import pandas as pd

def foo(name, index):
return name - index

x = np.arange(0, 2.01, 0.25)
y = np.arange(10, 30, 5.0)

df = pd.DataFrame(index = x, columns = y)

df.apply(lambda x: foo(x.name, x.index))

输出

       10.0   15.0   20.0   25.0
0.00 10.00 15.00 20.00 25.00
0.25 9.75 14.75 19.75 24.75
0.50 9.50 14.50 19.50 24.50
0.75 9.25 14.25 19.25 24.25
1.00 9.00 14.00 19.00 24.00
1.25 8.75 13.75 18.75 23.75
1.50 8.50 13.50 18.50 23.50
1.75 8.25 13.25 18.25 23.25
2.00 8.00 13.00 18.00 23.00

在上面的例子中,构成df的每个Series的列名和索引通过df.apply() foo()。在 foo() 中,每个值都是通过从它自己的列名值中减去它自己的索引值来定义的。在这里,您可以看到在 df 的调用中,使用 x.index 访问每一行的索引值,并使用 x.name 访问列值。申请()

更新

非常感谢@SyntaxError 指出 x.indexx.name 可以在 中传递给 foo() >df.apply() 而不是将整个系列 (x) 馈送到函数中并在其中手动访问值。如前所述,这似乎比我最初的回应更符合 OP 的用例——这在很大程度上是相同的,但将每个 x 系列传递给 foo() 然后负责提取x.namex.column

关于python - 如何将函数应用于数据框中的每个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65356414/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com