Как перебирать и форматировать строки в фрейме данных, используя отдельный файл - PullRequest
0 голосов
/ 05 мая 2020

Мне нужна помощь в форматировании некоторых строк с помощью Python фрейма данных. По сути, у меня есть два файла, в которых содержимое 1 влияет на другой файл. Итак, в моем примере у меня есть

файл 1 и файл 2

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

Идея в том, что я должен l oop через файл 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'))

Проблема в том, что, хотя множитель сдвига работает, потому что все выходные данные относятся к одному и тому же файлу, значения долларов США и евро были перезаписаны, поэтому я обрабатываю только последнюю запись. Я просто не знаю, как справиться с этой ситуацией. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вот так:

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
0 голосов
/ 22 июля 2020

Это было окончательное решение проблемы

    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])
...