Skip to main content
 首页 » 编程设计

python之如何根据列子集中值的存在按行创建 pandas DataFrame 列

2025年05月04日10davidwang456

我有一个 pandas DataFrame 如下:

import pandas as pd 
data1 = {"column1": ["A", "B", "C", "D", "E", "F", "G"], 
         "column2": [338, 519, 871, 1731, 2693, 2963, 3379], 
         "column3": [5, 1, 8, 3, 731, 189, 9],  
         "columnA" : [5, 0, 75, 150, 0, 0, 0],  
         "columnB" : [0, 32, 0, 96, 0, 51, 0],  
         "columnC" : [0, 42, 0, 42, 0, 42, 42]} 
 
df = pd.DataFrame(data1) 
 
df 
>>>     column1   column2   column3   columnA   columnB   columnC 
0         A       338         5         5         0         0 
1         B       519         1         0        32        42 
2         C       871         8        75         0         0 
3         D      1731         3       150        96        42 
4         E      2693       731         0         0         0 
5         F      2963       189         0        51        42 
6         G      3379         9         0         0        42 

columnA、columnB 和 columnC 中的值是整数或零。我想检查 columnA、columnB 和 columnC 中的值,如果 columnC 中有整数和 columnA 和 columnB 列中的零。

如果 columnC 中有一个值,而 columnA 和 columnB 中有一个值,我希望 1 出现在新列 中新列。否则,newcolumn 中的值应为 0。

生成的数据框应该是:

>>>     column1   column2   column3   columnA   columnB   columnC     newcolumn 
0         A       338         5         5         0         0          0 
1         B       519         1         0        32        42          0 
2         C       871         8        75         0         0          0 
3         D      1731         3       150        96        42          0 
4         E      2693       731         0         0         0          0 
5         F      2963       189         0        51        42          0 
6         G      3379         9         0         0        42          1 
....                 .....                         ........... 

我知道如何按列检查值(例如使用 df.columnA == 0)并创建一个新列非常简单。但是,如何“按行”检查呢?

请您参考如下方法:

你可以使用 np.where

df['newcolumn'] = np.where((df.columnA ==0) & (df.columnB == 0) & (df.columnC!= 0), 1, 0) 
 
 
    column1 column2 column3 columnA columnB columnC newcolumn 
0   A       338     5       5       0       0       0 
1   B       519     1       0       32      42      0 
2   C       871     8       75      0       0       0 
3   D       1731    3       150     96      42      0 
4   E       2693    731     0       0       0       0 
5   F       2963    189     0       51      42      0 
6   G       3379    9       0       0       42      1