gpt4 book ai didi

Python pandas if 语句基于 boolean 限定符

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:16 25 4
gpt4 key购买 nike

我尝试做一个 IF 语句,它使我的货币对按字母顺序排列(即 USD/EUR 将翻转为 EUR/USD,因为 E 按字母顺序排在 U 之前,但是 CHF/JPY 将保持不变,因为 C 按字母顺序排列在 J.之前)最初我打算编写特定于此的代码,但意识到我需要翻转其他字段(主要是将正号更改为负号,反之亦然。)

所以我所做的是编写一个函数来创建一个新列并创建一个 boolean 标识符来确定该字段是否需要操作 (True) 或不需要 (False)。

def flipFx(ccypair):
first = ccypair[:3]
last = ccypair[-3:]
if(first > last):
return True
else:
return False

brsPosFwd['Flip?'] = brsPosFwd['Currency Pair'].apply(flipFx)

效果很好,可以满足我的要求。

然后我尝试编写一个 IF 语句来使用该字段创建两个新列:

if brsPosFwd['Flip?'] is True:
brsPosFwd['CurrencyFlip'] = brsPosFwd['Sec Desc'].apply(lambda x:
x.str[-3:]+"/"+x.str[:3])
brsPosFwd['NotionalFlip'] = -brsPosFwd['Current Face']
else:
brsPosFwd['CurrencyFlip'] = brsPosFwd['Sec Desc']
brsPosFwd['NotionalFlip'] = brsPosFwd['Current Face']

但是,这不能正常工作。它创建了两个新字段,CurrencyFlip 和 NotionalFlip,但将每条记录都视为 False 并粘贴之前的内容。

有没有人有什么想法?

最佳答案

Pandas 使用向量化函数。您正在对整个系列对象执行操作,就好像它们是单个元素一样。

您可以使用 numpy.where 来向量化您的计算:

import numpy as np

brsPosFwd['CurrencyFlip'] = np.where(brsPosFwd['Flip?'],
brsPosFwd['Sec Desc'].str[-3:]+'/'+brsPosFwd['Sec Desc'].str[:3]),
brsPosFwd['Sec Desc'])

brsPosFwd['NotionalFlip'] = np.where(brsPosFwd['Flip?'],
-brsPosFwd['Current Face'],
brsPosFwd['Current Face'])

另请注意,pd.Series.apply 应作为最后的手段使用;因为它是一个薄薄的低效循环。在这里您可以简单地使用 .str 访问器。

关于Python pandas if 语句基于 boolean 限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49754676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com