Python_Pandas - заполнение новой строки условием

Я пытаюсь пройти через свой фрейм данных и создать еще одну строку с именем «Конверсии». Я хотел бы, чтобы строка «Конверсии» заполнялась только тогда, когда в строке «Валюта» указано «EUR», и пропускалась, если это не EUR Как только валюта "EUR" была определена, я хотел бы умножить ее на объект JPY, который равен 2.

Текущий DF выглядит так:

Name     Currency     Amount  
a        EUR          12.00
b        USD          10.00
c        EUR           8.00
d        JPY          100.00
e        EUR          567.00

После выполнения я хотел бы, чтобы готовый продукт выглядел так:

Name     Currency     Amount  Conversions     
a        EUR          12.00      24.00
b        USD          10.00      20.00
c        EUR           8.00      16.00
d        JPY          100.00    200.00
e        EUR          567.00   1134.00

* данные в формате csv.
Пожалуйста, посмотрите мою попытку ниже:

импорт csv импортировать панд как pd импортировать numpy как np

JPY = (2)

df = pd.read_csv('df.csv', delimiter = ";")

for i in df.iteritems():
    if df.loc[(df['Currency'] == 'EUR')]:
        df['Conversions']= (df.to_numeric(df['Amount']*(JPY)))

Ответ Shell - ValueError: истинное значение DataFrame неоднозначно. Используйте a.empty, a.bool (), a.item (), a.any () или a.all ()

Заранее благодарим за любую помощь, которую вы можете предоставить этому новичку.

используйте np.select(conditions, choices, default) все, с чем я могу вам помочь, если вы не опубликуете фрейм данных

It_is_Chris 04.11.2018 02:14

Спасибо за редактирование. Ваш ожидаемый результат для конверсий - это сумма, умноженная на 2, просто сделайте df['Amount']*2 Ничего общего со столбцом валюты

It_is_Chris 04.11.2018 02:26

Привет, Крис, спасибо за ответ. Я хочу, чтобы он применялся только в том случае, если валюта - только евро. Остальные должны оставаться такими же.

Will Roberts 04.11.2018 02:29

ОК, значит, вы ожидаете, что вывод неверен; однако я знаю, что вы ищете

It_is_Chris 04.11.2018 02:32
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
4
63
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

используйте np.select, не нужно использовать цикл:

# your condition
conditions = [
    df['Currency'] == 'EUR'
]

# if condition is met
choices = [
    df['Amount']*2
]

# create a new column and a default value if no condition is met
# you can always change the default value to np.nan if you do not want a value
df['Conversions'] = np.select(conditions, choices, default=df['Amount'])


    Name    Currency    Amount  Conversions
0   a            EUR    12.0    24.0
1   b            USD    10.0    10.0
2   c            EUR    8.0     16.0
3   d            JPY    100.0   100.0
4   e            EUR    567.0   1134.0

Другие вопросы по теме