Python 数据帧值和行条件都依赖于其他列

Python 数据帧值和行条件都依赖于其他列,python,pandas,dataframe,numpy,slice,Python,Pandas,Dataframe,Numpy,Slice,我有一个数据框: 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中的值是ab,我需

我有一个数据框:

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
中的值是a
b
,我需要用行的
col2
col3
值的某个函数替换
col2
中的条目,但如果
col1
中的值不是a
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
理想情况下,这将是矢量化的,因为我的真实数据帧有几百万行

这与关于堆栈溢出的其他问题不同,因为它们只要求新值不依赖于其他列,或者一次更改所有行。多谢各位


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

使用
DataFrame.iloc

import pandas as pd
import numpy as np

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

df.loc[df['col1'] == 'b', 'col2'] = df['col3'] * np.exp(df['col2'])
print(df)
给出正确的答案

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

np.工作地点在哪里:

df.col2=np.where(df.col1==“b”,df.col3*np.exp(df.col2),df.col2)
它表示“对于每一行:如果
df
col1
中有
b'
,则从第二个参数中取值(这是
col2
col3
的函数);如果没有,则从第三个参数中取值(这是
col2
,因此它保持不变)。”。以矢量化方式将其应用于每一行

得到

输出:

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

非常感谢。目标数据帧中的值已更正。已将函数从exp(col2)+col3更改为exp(col2)*col3,但未更新示例中的值。谢谢!np.where比pd.loc快吗?很快在10**7行上进行了基准测试:np.where用了1.66秒,dp.loc用了2.42秒,非常相似,但接受了np.where更快的答案。@Connor_Tracy很高兴能提供帮助!是的,通常在numpy域中可能会有一些加速,但在这种情况下不会有太多。
    col1    col2    col3
0   a   1.00000     11
1   a   2.00000     12
2   b   261.11198   13
3   b   764.37410   14