import pandas as pd
df = pd.DataFrame({
'cakeName': ['A','B','C','D','E','F','G','H'],
'chocolate%': ['20','70','30','50','50','10','75','20'],
'milk%' : ['50','20','40','0', '30','80','15','10'],
'straberry%' : ['30','10','30','50','20','10','10','70'],
})
df.head(10)
我想基于列值创建一个新列'cakeType'
目标:
-浏览每个cakeName
-如果有一种独特的成分> = 75,则在'cakeType'中返回一个值
-例如:蛋糕“ G”巧克力%> = 75,然后是“ choco”等
-否则,如果所有成分的含量都不超过75,则只是“普通蛋糕”
我曾在论坛中寻求答案,但似乎不太合适,因为我将有很多成分专栏
因此扫描行以查找值> = 75是更好的方法吗?
非常感谢
答案 0 :(得分:2)
np.select
: np.select
的良好用例,其中我们定义了conditions
,并根据这些条件选择了choices
。另外,如果不满足任何条件,则我们有一个default
值:
conditions = [
df['chocolate%'].ge(75),
df['milk%'].ge(75),
df['straberry%'].ge(75)
]
choices = ['choco', 'milk', 'strawberry']
df['cakeType'] = np.select(conditions, choices, default='normal cake')
cakeName chocolate% milk% straberry% cakeType
0 A 20 50 30 normal cake
1 B 70 20 10 normal cake
2 C 30 40 30 normal cake
3 D 50 0 50 normal cake
4 E 50 30 20 normal cake
5 F 10 80 10 milk
6 G 75 15 10 choco
7 H 20 10 70 normal cake
idxmax
,Series.where
和fillna
:首先,我们获得列值为>= 75
的列名称。然后,我们删除没有any
值>= 75
的列名,并用fillna
normal cake