Как сделать новый столбец DF PANDAS условно на основе двух других столбцов - PullRequest
0 голосов
/ 30 мая 2018

У меня есть фрейм данных, который выглядит следующим образом:

col 1 | col2 | col3 | col4 | col5
'abc' |   1  |  20  |  10  |  15
'abc' |   2  |  25  |  5   |  30
'def' |   1  |  340 |  12  |  22
'def' |   2  |  185 |  16  |  120
...

Я хотел бы создать еще один столбец col6, который основан на условии: если col2 == 1, то col3 * col5, иначе 0;если col2 == 2, то col4 * col5, иначе 0. Таким образом, результирующий df должен выглядеть следующим образом:

col 1 | col2 | col3 | col4 | col5 | col6
'abc' |   1  |  20  |  10  |  15  | 300
'abc' |   2  |  25  |  5   |  30  | 150
'def' |   1  |  340 |  12  |  22  | 7480
'def' |   2  |  185 |  16  |  120 | 1920
...

Причина, по которой он должен возвращать 0, если ни 1, ни 2 только вcase col2 не имеет 1 или 2.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Попробуйте,

df.loc[df['col2'] ==1,'col6']=df['col3']*df['col5']
df.loc[df['col2'] ==2,'col6']=df['col4']*df['col5']
df['col6']=df['col6'].fillna(0)
0 голосов
/ 30 мая 2018

Использование np.select:

m1 = df.col2 == 1
m2 = df.col2 == 2

df['col6'] = np.select([m1, m2], [df.col3 * df.col5, df.col4 * df.col5], default=0)
print (df)
   col 1  col2  col3  col4  col5  col6
0  'abc'     1    20    10    15   300
1  'abc'     2    25     5    30   150
2  'def'     1   340    12    22  7480
3  'def'     2   185    16   120  1920
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...