Используйте два столбца Pandas DataFrame и добавьте новый столбец. Питон Панды - PullRequest
1 голос
/ 17 октября 2019

У меня есть датафрейм, который выглядит следующим образом

Currency    Amount    Country
EUR         12.06     France
USD         10.23     USA
INR         122.17    India
INR         422.01    India
USD         8.06      USA

У меня есть функция, которая будет принимать имя валюты, например, Валюта столбец и использовать Сумма для преобразования вобщая валюта

def convert_an_amount(amount,curr,target_currency):
    if curr in c.currencies:
        return c.convert(amount, curr , target_currency)
    return np.nan

Я хочу создать столбец нашего фрейма данных

def convert_to_common(amount,curr_name,target_curr):
    currency_coverted_variable - 
    ... required code ...

Мне бы хотелось иметь следующий фрейм данных

Currency    Amount    Country   Common Currency(EUR)
EUR         12.06     France    x
USD         10.23     USA       x
INR         122.17    India     x
INR         422.01    India     x
USD         8.06      USA       x

Есть ли способ закодировать эту функцию? Я использую библиотеку, которая конвертирует значение в функции, но как облегчить создание фрейма данных?

Условие для c.convert заключается в том, что он конвертирует только одно значение за раз!

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вы можете использовать DataFrame.apply со своей функцией:

df['new'] = df.apply(lambda x: convert_to_common(x['Amount'], x['Currency'], 'EUR'), axis=1)

Я думаю, что вы можете создать словарь для rate, затем использовать Series.mapи умножить на Amount, если требуется лучшая производительность:

eur = {'EUR':1, 'USD':2, 'INR':3}

df['new'] = df['Currency'].map(eur) * df['Amount']
print (df)
  Currency  Amount Country      new
0      EUR   12.06  France    12.06
1      USD   10.23     USA    20.46
2      INR  122.17   India   366.51
3      INR  422.01   India  1266.03
4      USD    8.06     USA    16.12

Подробно :

print (df['Currency'].map(d))
0    1
1    2
2    3
3    3
4    2
Name: Currency, dtype: int64
0 голосов
/ 17 октября 2019

Здесь https://chrisalbon.com/python/data_wrangling/pandas_make_new_columns_using_functions/

вы можете увидеть пример, где вы создаете свою функцию (в вашем случае convert_to_common)

# Create a function that takes two inputs, pre and post
def pre_post_difference(pre, post):
    # returns the difference between post and pre
    return post - pre

, а затем вы можете вызывать ее, добавляя переменную в свой фрейм данных

# Create a variable that is the output of the function
df['score_change'] = pre_post_difference(df['preTestScore'], df['postTestScore'])

# View the dataframe
df
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...