Pandas - Создать столбец (столбец C) со значениями из другого (столбец A), если наблюдается условие в другом столбце (столбец B) - PullRequest
2 голосов
/ 25 января 2020

У меня есть DataFrame, как мы можем видеть в таблице A с двумя столбцами. Значения в столбце A начинаются с 1. Значения в столбце B являются двоичными.

Мне нужно создать столбец C (Таблица B), в котором: если значения в столбце B равны 1, то получить значения в столбце A для этой соответствующей строки, иначе, если значение в столбцах B равно 0, тогда столбец C будет 0 для этой соответствующей строки.

Пример Таблица A:

+---+---+
| A | B |
+---+---+
| 6 |  1|
| 10|  0|
| 50|  0|
|100|  1|
| 5 |  1|
| 2 |  0|
+---+---+

Таблица B:

+---+---+---+
| A | B | C |
+---+---+---+
| 6 |  1| 6 |
| 10|  0| 0 |
| 50|  0| 0 |
|100|  1|100|
| 5 |  1| 5 |
| 2 |  0| 0 |
+---+---+---|

код:

# create df
import pandas as pd
d = {'A': [6,10,50,100,5,2], 'B': [1,0,0,1,1,0]}
dfA = pd.DataFrame(data=d) 
dfA

Может ли кто-нибудь помочь мне, пожалуйста? Спасибо! :)

Ответы [ 4 ]

1 голос
/ 25 января 2020

Если столбец B равен 0 или 1, вы можете просто указать несколько столбцов A и B, используя prod на axis=1

dfA['C'] = dfA.prod(axis=1)
#dfA['C'] = dfA[['A','B']].prod(axis=1) if you have more columns
print(dfA)

     A  B    C
0    6  1    6
1   10  0    0
2   50  0    0
3  100  1  100
4    5  1    5
5    2  0    0
1 голос
/ 25 января 2020

Спасибо за хороший минимальный рабочий пример!

Я бы решил это так:

dfA['C'] = dfA['A']          # copy A to C
dfA['C'][dfA['B'] == 0] = 0  # set all positions in C where B is 0 to 0

Получившийся dfA:

     A  B    C
0    6  1    6
1   10  0    0
2   50  0    0
3  100  1  100
4    5  1    5
5    2  0    0
1 голос
/ 25 января 2020

В numpy, где предложение первый аргумент - это условие, следующий - раздел "then", затем "else" - список

import numpy as np
df['C'] = np.where(df['B']==1, df['B'], 0)    
0 голосов
/ 25 января 2020
dfA['C']=0
dfA.loc[dfA['B']==1, 'C'] = dfA['A']
dfA
...