Pandas不同的数学运算,以列值为条件

ddarikpa  于 2023-04-10  发布在  其他
关注(0)|答案(2)|浏览(136)
data= {'start_value':[10,20,30,40,50,60,70],
'identifier':['+','+','-','-','+','-','-']}
df = pd.DataFrame(data)
start_value identifier
0   10  +
1   20  +
2   30  -
3   40  -
4   50  +
5   60  -
6   70  -

我试图创建一个新列“end_value”,根据“identifier”列中的“+”或“-”值,它会导致 *"*start_value”列的+5或-5。结果是下面的df。

start_value identifier  end_value
0   10  +   15.0
1   20  +   25.0
2   30  -   25.0
3   40  -   35.0
4   50  +   55.0
5   60  -   55.0
6   70  -   65.0

运行这段代码,我意识到替换了“end_value”列中的值,结果是这个df

df['end_value'] = 5 + df.loc[df['identifier']=="+"]['start_value']
df['end_value'] = -5 + df.loc[df['identifier']=="-"]['start_value']
start_value identifier  end_value
0   10  +   NaN
1   20  +   NaN
2   30  -   25.0
3   40  -   35.0
4   50  +   NaN
5   60  -   55.0
6   70  -   65.0

如果标识符col ==“+”加上5,如果标识符col ==“-”减去5,我如何应用if语句来合并结果?
我已经用下面的这篇文章对字符串做了类似的事情,但我不确定如何成功地将其应用于数学运算,导致'end_value' dtype为float。
Pandas: if row in column A contains "x", write "y" to row in column B

mnemlml8

mnemlml81#

可以使用矢量化操作:

import numpy as np

df['end_value'] = df['start_value'] + np.where(df['identifier'] == '+', 5, -5)

# OR

df['end_value'] = df['start_value'] + df['identifier'].replace({'+': 5, '-': 5})
print(df)

# Output
   start_value identifier  end_value
0           10          +         15
1           20          +         25
2           30          -         25
3           40          -         35
4           50          +         55
5           60          -         55
6           70          -         65
vqlkdk9b

vqlkdk9b2#

您可以将.apply()与lambda表达式一起使用。

data= {'start_value':[10,20,30,40,50,60,70],
'identifier':['+','+','-','-','+','-','-']}
df = pd.DataFrame(data)
df["end_value"] = df.apply(lambda row: row.start_value + 5 if row.identifier == "+" else row.start_value - 5, axis=1)

假设标识符列的值是+-

相关问题