Pandas - 如果观察到另一列(col B)中的条件,则使用另一列(col A)的值创建一列(col C)

Pandas - Create a column (col C) with values from another (col A) if a condition in another column (col B) is observed

我有一个 DataFrame,正如我们在 Table A 中看到的那样,它有两列。 A 列中的值是从 1 开始的整数。B 列中的值是二进制的。

我需要创建列 C (Table B),其中: 如果 B 列上的值为 1,则获取相应行的 A 列上的值, 否则,如果 B 列上的值为 0,则相应行的 C 列将为 0。

例子 Table答:

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

Table乙:

+---+---+---+
| 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

有人能帮帮我吗?谢谢! :)

dfA['C']=0
dfA.loc[dfA['B']==1, 'C'] = dfA['A']
dfA

感谢您提供的极简工作示例!

我会这样解决:

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

numpy where clause 中,第一个参数是条件,下一个是 "then" 部分,然后 "else" 是列表

import numpy as np
df['C'] = np.where(df['B']==1, df['B'], 0)    

如果 B 列为 0 或 1,您可以在 axis=1

上使用 prod 将 A 列和 B 列合并
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