0

我正在寻找有关如何使用 Python 数据框格式化某些行的帮助。基本上我有两个文件,其中 1 的内容会影响另一个文件。所以在我的例子中我有

文件 1 和文件 2

Currency,Shifts.   NewCurrency,Value
EUR,1              EUR,0.5
USD,1.5            USD,1.5
ZAR,2              ZAR,10

我的想法是我应该遍历文件 2,当我找到相应的货币时,我通过文件 1 中的移位来多列 2,并生成一个结果文件,结果如下

NewCurrency,Value
EUR,0.5
USD,2.25
ZAR,20

这是我正在使用的代码

  for i, row in df.iterrows():
        newFX = float(row['SpotPriceVAL']) * float(multiplier)
        df.at[i, 'SpotPriceVAL'] = newFX

    scenario_file = 'fx.csv'
    print (df.to_csv(scenario_file ,index=None, sep=',', mode='w'))

问题是,虽然移位乘数有效,但因为所有输出都到同一个文件,所以美元和欧元值被覆盖,所以我只处理最后一个条目。我只是不确定如何处理这种情况。任何帮助,将不胜感激。

4

2 回答 2

1

像这样:

In [1664]: df1                                                                                                                                                                                              
Out[1664]: 
  Currency  Shifts
0      EUR     1.0
1      USD     1.5
2      ZAR     2.0

In [1665]: df2                                                                                                                                                                                              
Out[1665]: 
  Currency  Shifts
0      EUR     0.5
1      USD     1.5
2      ZAR    10.0

In [1657]: p = pd.merge(df1, df2, on='Currency')                                                                                                                                                            

In [1658]: p['Shifts'] = p.Shifts_x * p.Shifts_y

In [1662]: p.drop(['Shifts_x', 'Shifts_y'], 1, inplace=True)                                                                                                                                                

In [1663]: p                                                                                                                                                                                                
Out[1663]: 
  Currency  Shifts
0      EUR    0.50
1      USD    2.25
2      ZAR   20.00
于 2020-05-04T22:08:29.280 回答
0

这是解决此问题的最终解决方案

    try:
        for index, row in df_scen.iterrows():
            message = " Processing currency %s with shock %s and %s" % (row[0], row[2], scenario)
            print (logtime + " " + 'INFO: [' + scriptname + ']' + message)
            spot = df.loc[df["IDENTIFIER"] == row[0]]["SpotPriceVAL"].tolist()[0]
            newFX = float(spot) * float(row[2])
            df.loc[(df.IDENTIFIER == row[0]),'SpotPriceVAL']=newFX
            df.to_csv(scenario_file, index=None, sep=',', mode='w')
    except IndexError as error:
        print ("Currency %s does not exist in File" % row[0])
于 2020-07-22T15:08:46.767 回答