Skip to main content
 首页 » 编程设计

python之Pandas:如何根据特定行值将值应用于一组行

2025年05月04日14jillzhang

我有以下数据框,我想在其中重新创建列 To Show?。这个想法是,如果 Product 组在任何行的 Color 列中具有 Red 的值,那么我想要 To Show? 列与Product A 的所有行的值 Yes。对于任何不具有 Red 值的产品组,我希望该列的值为 No。

   Year  Week Product   Color To Show? 
0  2019    21       A   Green      Yes 
1  2019    22       A   Green      Yes 
2  2019    23       A     Red      Yes 
3  2019    24       A   Green      Yes 
4  2019    25       C   Green       No 
5  2019    26       C  Yellow       No 
6  2019    27       C   Green       No 
7  2019    28       B   Green      Yes 
8  2019    29       B     Red      Yes 
9  2019    30       B  Yellow      Yes 
import pandas as pd 
 
data = { 
    'Year': [2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019], 
    'Week': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30], 
    'Product': ['A', 'A', 'A', 'A', 'C', 'C', 'C', 'B', 'B', 'B'], 
    'Color': ['Green', 'Green', 'Red', 'Green', 'Green', 'Yellow', 'Green', 'Green', 'Red', 'Yellow'], 
    'To Show?': ['Yes', 'Yes', 'Yes', 'Yes', 'No', 'No', 'No', 'Yes', 'Yes', 'Yes'] 
} 
 
df = pd.DataFrame(data) 

我尝试过使用 unique,但不确定如何解析系列并根据它分配值?

df1 = df.groupby('Product')['Color'].unique() 

请您参考如下方法:

我们可以 Groupby.transform 和 any (如果组中的任何行是红色的)和 np.where 用于条件创建我们的新专栏:

m = df.groupby('Product')['Color'].transform(lambda x: x.eq('Red').any()) 
 
df['To Show?'] = np.where(m, 'Yes', 'No') 

输出

   Year  Week Product   Color To Show? 
0  2019    21       A   Green      Yes 
1  2019    22       A   Green      Yes 
2  2019    23       A     Red      Yes 
3  2019    24       A   Green      Yes 
4  2019    25       C   Green       No 
5  2019    26       C  Yellow       No 
6  2019    27       C   Green       No 
7  2019    28       B   Green      Yes 
8  2019    29       B     Red      Yes 
9  2019    30       B  Yellow      Yes