python - 如何使用 lambda 函数在数据帧上使用 Pandas apply() ?

标签 python pandas

考虑以下代码:

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/

相关文章:

python - 如何使用 python 脚本获取谷歌搜索结果提要而不被识别为机器人?

python - 重新排列 python pandas 数据框(部分转置)

python - Pandas groupby 多列,多列列表

python - Python 中的数据框转换

python - Pandas df.style.bar 同时保持四舍五入

python - 循环访问多个 CSV 文件并生成多个输出

python - 服务器启动时在 Django 中创建对象的最佳方法是什么?

python - 在字符串中查找重复的字符组合

python - Pandas - 按位类似并计算加权平均值

python - 在 Pandas 中使用 .loc 将集合插入单元格时出现不一致的行为