Указание индекса для операции вещания Pandas - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть Pandas Dataframe, к которому я хочу применить условие, и использовать полученный индекс на другом Dataframe.В качестве простого примера:

a = pd.DataFrame(np.array([[1, 1, 2], [1, 2, 2], [2, 2, 1]]), columns=['a', 'b', 'c'])

   a  b  c
0  1  1  2
1  1  2  2
2  2  2  1

b = pd.Series([111, 222, 333], index=['a', 'b', 'c'])

a    111
b    222
c    333

В этом примере я хотел бы создать третий массив с такими же размерами, как у «a», со значением 1 (или True), где a == 2:

     a    b    c
0    0    0  333
1    0  222  333
2  111  222    0

Мой вопрос: как я могу выполнить такую ​​операцию и указать ось?Я подозреваю, что решение состоит в том, чтобы каким-то образом использовать pd.where, хотя я не хочу сохранять какие-либо исходные значения.

1 Ответ

2 голосов
/ 30 апреля 2019

IIUC

a.eq(2).mul(b,axis=1)
Out[803]: 
     a    b    c
0    0    0  333
1    0  222  333
2  111  222    0

Как вы упомянули pd.where

a.mask(a==1,0).mask(a==2,b,axis=1)
Out[834]: 
     a    b    c
0    0    0  333
1    0  222  333
2  111  222    0
...