我有一个 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 中的值,我需要用行的
是 col2
和 col3
值的某些函数替换 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)
它表示“对于每一行:如果 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
关于python - Pandas 数据帧值和行条件都取决于其他列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67034981/