我有一堆交易。数据集中的列提供有关货币和每个事务流向哪个FS的信息。
我想以两种不同的汇率转换货币,这取决于交易流向哪个FS。有两种货币:美元和加元。有两个FS。我有一个列与所有金额的美元和一个与所有的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我想在熊猫中实现的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我知道这个错误:
值试图在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发布于 2019-03-03 04:31:17
你可能需要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)发布于 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
https://stackoverflow.com/questions/54965549
复制相似问题