#python #pandas #numpy #dataframe
#python #pandas #numpy #фрейм данных
Вопрос:
У меня есть 2 фрейма данных, первый выглядит так
df1:
MONEY Value
0 EUR 850
1 USD 750
2 CLP 1
3 DCN 1
df2:
Money
0 USD
1 USD
2 USD
3 USD
4 EGP
... ...
25984 USD
25985 DCN
25986 USD
25987 CLP
25988 USD
Я хочу удалить «Денежные» значения df2, которых нет в df1. и добавить любой столбец значений столбца «Значение» в df1
Money Value
0 USD 720
1 USD 720
2 USD 720
3 USD 720
... ...
25984 USD 720
25985 DCN 1
25986 USD 720
25987 CLP 1
25000 USD 720
Комментарии:
1. Что-то вроде
df2["Money"].map(df1.set_index("MONEY")["Value"]).dropna()
2. Это вроде как сработало. Но
df2['Value'] = df2["Money"].map(df1.set_index("MONEY")["Value"]).dropna()
Можете ли вы объяснить это в ответе?
Ответ №1:
Шаг за шагом:
df1.set_index("MONEY")["Value"]
Этот код преобразует столбец MONEY
в Dataframe
индекс. Что приводит к:
print(df1)
MONEY
EUR 850
USD 150
DCN 1
df2["Money"].map(df1.set_index("MONEY")["Value"])
Этот код отображает содержимое df2
в df1
. Это возвращает следующее:
0 150.0
1 NaN
2 850.0
3 NaN
- Теперь мы присваиваем предыдущий столбец новому столбцу в
df2
calledValue
. Собрать все это вместе:
df2["Value"] = df2["Money"].map(df1.set_index("MONEY")["Value"])
df2
теперь выглядит так:
Money Value
0 USD 150.0
1 GBP NaN
2 EUR 850.0
3 CLP NaN
- Осталось сделать только одно: удалить все строки, которые имеют
NaN
значение:
df2.dropna(inplace=True)
Весь пример кода:
import pandas as pd
# Create df1
x_1 = ["EUR", 850], ["USD", 150], ["DCN", 1]
df1 = pd.DataFrame(x_1, columns=["MONEY", "Value"])
# Create d2
x_2 = "USD", "GBP", "EUR", "CLP"
df2 = pd.DataFrame(x_2, columns=["Money"])
# Create new column in df2 called 'Value'
df2["Value"] = df2["Money"].map(df1.set_index("MONEY")["Value"])
# Drops any rows that have 'NaN' in column 'Value'
df2.dropna(inplace=True)
print(df2)
Выводит:
Money Value
0 USD 150.0
2 EUR 850.0