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

时间:2019-03-03 04:25:02

标签: python pandas data-analysis

我有一笔交易转储。数据集中的列提供有关货币以及每笔交易流向哪个金融服务的信息。

我希望根据交易流向的FS以两种不同的汇率转换货币。有两种货币美元和加元。有两个FS。我有一列包含所有金额的美元和一个包含所有加元的列。有关示例,请参见下表。

<platform name="android">
  <replace-string file="project.properties" find="com.google.android.gms:play-services-auth:11.8.0" replace="com.google.android.gms:play-services-auth:+" />
  <replace-string file="project.properties" find="com.google.android.gms:play-services-identity:11.8.0" replace="com.google.android.gms:play-services-identity:+" />

我要在熊猫中实现的伪代码是:

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

到目前为止,这是我在大熊猫中所拥有的:

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

我收到此错误:

  

试图在DataFrame的切片副本上设置一个值

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

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

2 个答案:

答案 0 :(得分:1)

您可能需要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)

答案 1 :(得分:0)

如果希望仅继续依赖熊猫(即使它是基于Numpy构建的),则使用.loc索引器的正确语法是:

df.loc[row_indexer,column_indexer]

每个熊猫的documentation

  

这是正确的访问方法

     

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

     

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

...

  

这根本不起作用,因此应避免

     

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