基于多列条件的新列

时间:2019-11-01 15:36:56

标签: python pandas

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是更好的方法吗?

非常感谢

1 个答案:

答案 0 :(得分:2)

方法1: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

方法2:idxmaxSeries.wherefillna

首先,我们获得列值为>= 75的列名称。然后,我们删除没有any>= 75的列名,并用fillna

删除它们。
normal cake