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
中的值是ab
,我需要用行的col2
和col3
值的某个函数替换col2
中的条目,但如果col1
中的值不是ab
,则保持行不变。假设函数是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