python - Pandas - 根据其他 3 列中的值设置列中的值
问题描述
我有一个交易转储。数据集中的列提供有关货币和每笔交易流向哪个 FS 的信息。
我想根据交易流向的 FS 以两种不同的汇率换算货币。有美元和加元两种货币。有两个FS。我有一列以美元为单位,另一列以加元为单位。请参阅下表中的示例。
FS CUR USD CAD USD_FS
BS USD 1000 1364 X
BS USD 2000 2729 X
IS CAD 300 409 X
IS USD 55 75 X
BS CAD 1312 1790 X
IS CAD 3156 4306 X
IS USD 32165 43881 X
BS CAD 32156 43869 X
我想在 pandas 中实现的伪代码是:
ye_rate = 1.3642
average_rate = 1.2957
if FS == 'BS' and CUR == 'CAD':
USD_FS = CAD/ye_rate
else if FS == 'IS' and CUR == 'USD':
USD_FS = CAD/average_rate
else:
USD_FS = USD
到目前为止,这就是我在 pandas 中所拥有的:
for i in range(0, len(df)):
if df.loc[i]['Currency'] == 'CAD':
if df.loc[i]['FS'] == 'BS':
df.loc[i]['USD_FS'] = df.loc[i]['CAD']/ye_rate
if df.loc[i]['FS'] == 'IS':
df.loc[i]['USD_FS'] = df.loc[i]['CAD']/average_rate
我收到此错误:
试图在 DataFrame 中的切片副本上设置一个值
对于上面的示例表,我想要以下输出:
FS CUR USD CAD USD_FS
BS USD 1000 1364 1000
BS USD 2000 2729 2000
IS CAD 300 409 409/average_rate
IS USD 55 75 55
BS CAD 1312 1790 1790/ye_rate
IS CAD 3156 4306 4306/average_rate
IS USD 32165 43881 32165
BS CAD 32156 43869 43869/ye_rate
解决方案
你可能需要np.select
rate1=1
rate2=2
s1=(df.FS=='BS')&(df.CUR=='CAD')
s2=(df.FS=='IS')&(df.CUR=='USD')
np.select([s1,s2],[df.CAD*rate1,df.CAD*rate2],default = df.CAD)
#df.CAD=np.select([s1,s2],[df.CAD*rate1,df.CAD*rate2],default = df.CAD)
Out[280]:
array([ 1364, 2729, 409, 150, 1790, 4306, 43881, 43869],
dtype=int64)
推荐阅读
- java - 尝试删除记录时如何修复 Spring-Boot 中的“违反外键约束”。使用@ManyToMany
- android - 为什么在我的设备上运行时我的按钮是透明的?
- pyspark - 如何解决 Spark 中的“aggregateByKey 不是 org.apache.spark.sql.Dataset 的成员”?
- python - 如何用 Scipy 拟合对数正态分布?
- android - 在列表视图中加载每个项目的所有数据还是只加载需要的信息?
- python - 我的 python 代码偶尔需要 15 毫秒来执行一个空方法
- regex - 在bash中使用正则表达式从字符串中获取值
- ios - 健康包权限返回错误值 ios Bug?
- c - 这些 char 数组声明背后发生了什么?
- java - 在用户设置的特定日期更新表格