考虑以下代码:
import pandas as pd
import numpy as np
N = 10
idx = np.linspace(0, 1, N)
labels = ["a", "b", "c"]
values = np.stack((np.random.rand(N), np.random.rand(N), np.random.rand(N))).transpose()
df = pd.DataFrame(index=idx, columns=labels, data=values)
现在假设我要从 "a"
列中减去值 3
并从 "b 列中减去值
。5
“
我可以通过以下方式轻松实现这一目标:
cols = labels[0:2]
df.loc[:, cols] = df.loc[:, cols].subtract([3, 5])
但是,如果我使用以下内容:
df.loc[:, cols].apply(lambda x: x.subtract([3, 5]))
我收到一个ValueError:长度必须相等
。
如果我使用
df.loc[:, cols].apply(lambda x: x.subtract(3))
它有效,但它从 cols
中指定的两列中减去 3
。
鉴于apply()
方法的通用性,我想了解当lambda函数中的
x
类型时如何使用它apply()
方法中使用的 code> 是一个 dataframe
,我想在不同的列中执行不同的操作。
我正在寻找不太详细的方法,我知道我可以通过迭代cols
来通过for循环来完成它。
最佳答案
使用axis=1
来处理每行,但它像矢量化第一个解决方案一样慢:
df.loc[:, cols] = df.loc[:, cols].apply(lambda x: x.subtract([3, 5]), axis=1)
您可以使用 print
检查它是如何工作的:
#each Series has 2 values by rows
df.loc[:, cols].apply(lambda x: print (x), axis=1)
#each Series has all values of columns
df.loc[:, cols].apply(lambda x: print (x))
关于python - 如何使用 lambda 函数在数据帧上使用 Pandas apply() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73049935/