Копировать значения из одного столбца в другие столбцы в той же строке на основе определенных критериев в Pandas - PullRequest
0 голосов
/ 27 октября 2018

У меня есть data frame, как показано ниже:

import pandas as pd

df = pd.DataFrame({'ID':['M001','M002','M003','M004','M005'],
                      'X001':[0,0,1,0,0],
                      'X002':[0,0,1,1,0],
                      'X003':[0,0,1,0,1],
                      'X004':[1,0,1,0,0],
                      'X005':[1,0,1,1,0]})

print(df)

И это выглядит так:

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0     1     1
1  M002     0     0     0     0     0
2  M003     1     1     1     1     1
3  M004     0     1     0     0     1
4  M005     0     0     1     0     0

Что я хочу сделать, это скопировать значение в ID столбец в другие столбцы, где значение равно 1, как показано ниже.

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0

Какой самый простой и быстрый способ сделать это для ~ 2000 x ~ 2000 data frame?

Ответы [ 2 ]

0 голосов
/ 27 октября 2018

Я мог бы использовать where, например:

In [218]: df.where(df != 1, df.ID, axis=0)
Out[218]: 
     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0

Существует эквивалент этого np.where, который, как обычно, немного быстрее, но мне труднее его читать.

0 голосов
/ 27 октября 2018

Вот способ, заменив 1 на нулевое значение, транспонируя, используя fillna и транспонируя обратно:

df.T.replace(1,pd.np.nan).fillna(df['ID']).T

     ID  X001  X002  X003  X004  X005
0  M001     0     0     0  M001  M001
1  M002     0     0     0     0     0
2  M003  M003  M003  M003  M003  M003
3  M004     0  M004     0     0  M004
4  M005     0     0  M005     0     0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...