首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >熊猫-根据其他3列中的值在列中设置值

熊猫-根据其他3列中的值在列中设置值
EN

Stack Overflow用户
提问于 2019-03-03 04:25:02
回答 2查看 163关注 0票数 2

我有一堆交易。数据集中的列提供有关货币和每个事务流向哪个FS的信息。

我想以两种不同的汇率转换货币,这取决于交易流向哪个FS。有两种货币:美元和加元。有两个FS。我有一个列与所有金额的美元和一个与所有的CAD。有关示例,请参见下表。

代码语言:javascript
复制
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

我想在熊猫中实现的psuedo代码是:

代码语言:javascript
复制
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

到目前为止,我对熊猫的了解如下:

代码语言:javascript
复制
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的切片副本上设置。

对于上面的示例表,我希望得到以下输出:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-03 04:31:17

你可能需要np.select

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2019-03-03 05:19:56

如果希望继续只依赖Pandas (尽管它构建在Numpy之上),那么使用.loc索引器的正确语法是:

df.loc[row_indexer,column_indexer]

潘达斯的文档

这是正确的访问方法。 在305: dfc = pd.DataFrame({'A':'aaa','bbb','ccc','B':1,2,3}) 306号: dfc.loc0,'A‘= 11

..。

这根本行不通,所以应该避免。 dfc.loc = 1111

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54965549

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档