Pandas如何在指定行满足条件时对该行其余列执行exp指数运算
解决方案
首先需要导入numpy库用于指数运算,你原来的代码存在一个小笔误:定义的数据源变量是data_exp,创建DataFrame时错误写为data,修正后按以下逻辑实现即可:
推荐写法(向量化操作,效率更高)
import pandas as pd import numpy as np # 构造DataFrame data_exp = [['no', 2,1.5,3], ['exp', 2,1.5,3], ['no', 2,1.5,5]] df = pd.DataFrame(data_exp, columns = ['Type', 'V1','V2','V3']) # 筛选Type为exp的行,对该行第2列及之后的所有列做指数运算 df.loc[df['Type'] == 'exp', df.columns[1:]] = np.exp(df.loc[df['Type'] == 'exp', df.columns[1:]]) # 如果需要和示例一样保留2位小数,增加以下代码 df.loc[:, df.columns[1:]] = df.loc[:, df.columns[1:]].round(2)
原循环写法的修正
你之前的循环不生效,是因为只计算了指数结果但没有赋值回原DataFrame的对应位置,修正后写法如下(仅做参考,更推荐上面的向量化写法):
for i in df.index: if df.loc[i, 'Type'] == 'exp': df.loc[i, df.columns[1:]] = np.exp(df.loc[i, df.columns[1:]]).round(2)
运行后得到的df数值和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者Vitomir
相关产品推荐
相关产品推荐

