Python Pandas-根据其他3列中的值设置列中的值

Python Pandas-根据其他3列中的值设置列中的值,python,pandas,data-analysis,Python,Pandas,Data Analysis,我有大量的交易。数据集中的列提供有关货币的信息以及每个事务流向的FS 我想根据交易流向哪个财政司,以两种不同的汇率换算货币。有两种货币:美元和加元。有两个F。我有一个列,所有金额都是美元,还有一个列,所有金额都是CAD。有关示例,请参见下表 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

我有大量的交易。数据集中的列提供有关货币的信息以及每个事务流向的FS

我想根据交易流向哪个财政司,以两种不同的汇率换算货币。有两种货币:美元和加元。有两个F。我有一个列,所有金额都是美元,还有一个列,所有金额都是CAD。有关示例,请参见下表

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中实现的psuedo代码是:

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
这就是到目前为止我对熊猫的了解:

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
我得到这个错误:

试图在数据帧切片的副本上设置值

对于上面的示例表,我需要以下输出:

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。选择

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)

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

df.loc[行索引器、列索引器]

每只熊猫:

这是正确的访问方法

在[305]中:dfc=pd.DataFrame({'A':['aaa','bbb','ccc'],'B':[1,2,3]})

在[306]中:dfc.loc[0,'A']=11

这根本行不通,因此应该避免

dfc.loc[0][A']=1111


谢谢,成功了。我稍微编辑了一下我的问题,并得到了想要的结果:
s1=(df.FS='BS')和(df.Currency='CAD')
s2=(df.FS='IS')和(df.Currency='CAD')
df['USD\usfs']=np。选择([s1,s2],[df.CAD/ye\u rate,df.CAD/average\u rate],default=df.USD)