python - Pandas 数据帧值和行条件都取决于其他列

标签 python pandas dataframe numpy slice

我有一个 Pandas 数据框:

import pandas as pd

df = pd.DataFrame({'col1': ['a','a','b','b'],
                   'col2': [1,2,3,4],
                   'col3': [11,12,13,14]})
  col1 col2 col3
0   a   1   11
1   a   2   12
2   b   3   13
3   b   4   14

如果 col1 中的值,我需要用行的 col2col3 值的某些函数替换 col2 b,但如果 col1 中的值不是 b,则保留行不变。假设函数是 col3 * exp(col2),然后将其应用于上面的 df 会产生

    col1   col2   col3
0   a      1      11
1   a      2      12
2   b      261.1  13
3   b      764.4  14

理想情况下,这将是矢量化的和就地的,因为我的真实 DataFrame 有几百万行。

这与 Stack Overflow 上的其他问题不同,因为它们只要求新值不依赖于其他列或一次更改所有行。谢谢。

编辑:更正了目标 DataFrame。已将函数从 exp(col2)+col3 更改为 exp(col2)*col3 而未更新示例中的值。

最佳答案

np.where 完成工作:

df.col2 = np.where(df.col1 == "b", df.col3 * np.exp(df.col2), df.col2)

它表示“对于每一行:如果 dfcol1 中有 'b',则从第二个参数(即col2col3 的函数);如果不是,则从第三个参数(即 col2 所以它保持原样)中获取值。 ”。以矢量化方式将其应用于每一行。

得到

  col1       col2  col3
0    a    1.00000    11
1    a    2.00000    12
2    b  261.11198    13
3    b  764.37410    14

关于python - Pandas 数据帧值和行条件都取决于其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67034981/

相关文章:

python - lambda函数及其参数的范围?

python - 如何使用不满足条件的情况下的随机值修改数据帧值

python - 在 pandas 数据框查询中转换类型的任何方法?

python - 使用 pd.read_clipboard 复制数据框时如何处理自定义命名索引?

r - 使用函数参数作为 R 中新数据框的名称

python - 在 python 中打印混淆矩阵的精度

python - 操作系统错误 : cannot load library 'C:\Program Files\R\R-4.0.2\bin\x64\R.dll' : error 0x7e

python - 从 Pandas DataFrame 创建复杂的嵌套字典

python - 重用通过枚举创建的Python对象

python - Jupyter Pandas DataFrame - 读取列值