Функции PANDAS OFFSET и MATCH с двумя кадрами данных - PullRequest
0 голосов
/ 12 декабря 2018

У меня есть эта формула Excel, которую нужно применить к кадру данных pandas

=IF(OFFSET(list!$B$1,MATCH($X1,list!$A:$A,0)-1,0)=0,"",OFFSET(list!$B$1,MATCH($X1,list!$A:$A,0)-1,0))

кадр данных: список

A       B           C    
24309   Pepsi       US
45768   McDonalds   US
45638   Apple       Ireland
59374   Google      Ireland

фрейм данных 2: new_list

X         Y
24309     ?
45768     ?
45638
59374

Цель состоит в том, чтобы заполнить столбец Y второго фрейма данных new_list, если значение в X соответствует значению в диапазоне A1:A4

Я борюсь с лучшим подходом для этого.Может ли кто-нибудь указать мне правильное направление?Я думал об использовании panda groupby с np.where для сравнения и получения значения столбца B при совпадении.

Edit

new_list['Y'] = np.where(list['A'] == new_list['X'], list['B'], np.nan)

Решение, приведенное выше, дает те же результаты, но является ли это правильным способом определения такой Excel формулы в Pandas?

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018
new_list['Y'] = np.where(list['A'] == new_list['X'], list['B'], np.nan)

Приведенный выше код был реализован и предоставляет то же решение.

0 голосов
/ 12 декабря 2018

Самый простой и эффективный способ - применить маску к значениям.Здесь вы можете найти образец кадра данных:

df1 = pd.DataFrame({
"Date" : ['2013-11-22', '2013-10-24', '2013-09-24', '2013-02-15'],
"Fruit" : ['Banana', 'Orange', 'Apple', 'Celery'], 
"Num" : [22.1, 8.6, 7.6, 10.2],
"Color" : ['Yellow', 'Orange', 'Green', 'Green']
})

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

mask = (df1["Fruit"] == df1["Color"])
print(mask)

Надеюсь, это поможет.

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