我有以下数据框,我想在其中重新创建列 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
