multipliers = {'A' : 5, 'B' : 10, 'C' : 15, 'D' : 20}
df = pd.util.testing.makeDataFrame() # a random df with columns A,B,C,D

f = lambda x, col: multipliers[col] * x

是否有一种非循环的方式将f应用于每列,例如df.apply(f, axis = 0, ?)?我能用loop实现的是

df2 = df.copy()
for c in df.columns:
    df2[c] = f(df[c], c)

(实数f比上述示例更复杂,请将f视为两个变量的黑盒函数,arg1是数据,arg2是列名)

推荐答案

使用lambda函数,对于传递列名,使用x.name:

np.random.seed(2022)
multipliers = {'A' : 5, 'B' : 10, 'C' : 15, 'D' : 20}
df = pd.util.testing.makeDataFrame() # a random df with columns A,B,C,D

f = lambda x, col: multipliers[col] * x
df2 = df.copy()
for c in df.columns:
    df2[c] = f(df[c], c)
print (df2.head())
                    A          B          C          D
9CTWXXW3ys   2.308860   6.375789   5.362095 -23.354181
yq1PHBltEO   2.876024   1.950080  15.772909 -13.776645
lWtMioDq6A -11.206739  17.691500 -12.175996  25.957264
lEHcq1pxLr  -6.510434  -6.004475  14.084401  13.999673
xvL04Y66tm  -3.827731  -3.104207  -4.111277   1.440596

df2 = df.apply(lambda x: f(x, x.name))
print (df2.head())
                    A          B          C          D
9CTWXXW3ys   2.308860   6.375789   5.362095 -23.354181
yq1PHBltEO   2.876024   1.950080  15.772909 -13.776645
lWtMioDq6A -11.206739  17.691500 -12.175996  25.957264
lEHcq1pxLr  -6.510434  -6.004475  14.084401  13.999673
xvL04Y66tm  -3.827731  -3.104207  -4.111277   1.440596

Python相关问答推荐

从流程获取定期更新

在IIS中运行的FastAPI-获取权限错误:[Win错误10013]试图以其访问权限禁止的方式访问插槽

查找3D数组中沿一个轴的相同值序列的长度(与行程长度编码相关)

Plotly Dash函数来切换图形参数-pPython

try 使用tensorFlow.keras.models时optree Import错误

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

剧作家Python:expect(locator).to_be_visible()vs locator.wait_for()

Python中使用时区感知日期时间对象进行时间算术的Incredit

Pydantic 2.7.0模型接受字符串日期时间或无

点到面的Y距离

如何让剧作家等待Python中出现特定cookie(然后返回它)?

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

为什么sys.exit()不能与subproccess.run()或subprocess.call()一起使用

Python解析整数格式说明符的规则?

如何获得每个组的时间戳差异?

多指标不同顺序串联大Pandas 模型

让函数调用方程

用渐近模计算含符号的矩阵乘法

将scipy. sparse矩阵直接保存为常规txt文件

基于Scipy插值法的三次样条系数