如何使用单独的文件迭代和格式化数据框中的行

问题描述 投票:0回答:1

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

文件1和文件2

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

[我的想法是我应该遍历文件2,当我找到相应的货币时,我将2列乘以文件1的移位,并生成一个结果如下的单个结果文件

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'))

问题是,尽管移位乘数有效,但是由于所有输出都在同一个文件中,因此USD和EUR值被覆盖,因此我只处理最后一个条目。我只是不确定如何处理这种情况。任何帮助,将不胜感激。

python pandas dataframe rows
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.