如何根据pandas中的多个列分配值?

时间:2017-09-10 20:01:56

标签: python pandas

是否有一种优雅的方法可以根据pandas中数据框中的多个列来分配值?我们假设我有一个包含2列的数据框:FruitType和Color。

import pandas as pd
df = pd.DataFrame({'FruitType':['apple', 'banana','kiwi','orange','loquat'],
'Color':['red_black','yellow','greenish_yellow', 'orangered','orangeyellow']})

我想基于' FruitType'分配第三列的值,' isYellowSeedless'和'颜色'列。

我有一个水果清单,我认为它是无籽的,并且想检查颜色列,看它是否包含str"黄色"。

seedless = ['banana', 'loquat']

如何优雅地将这一切串联起来?

这是我没有尝试过的尝试:

df[(df['FruitType'].isin(seedless)) & (culture_table['Color'].str.contains("yellow"))]['isYellowSeedless'] = True

2 个答案:

答案 0 :(得分:2)

locmask

一起使用
m = (df['FruitType'].isin(seedless)) & (df['Color'].str.contains("yellow"))

df.loc[m, 'isYellowSeedless'] = True
print (df)
             Color FruitType isYellowSeedless
0        red_black     apple              NaN
1           yellow    banana             True
2  greenish_yellow      kiwi              NaN
3        orangered    orange              NaN
4     orangeyellow    loquat             True

如果需要TrueFalse输出:

df['isYellowSeedless'] = m
print (df)
             Color FruitType  isYellowSeedless
0        red_black     apple             False
1           yellow    banana              True
2  greenish_yellow      kiwi             False
3        orangered    orange             False
4     orangeyellow    loquat              True

对于某些标量的if-else,请使用numpy.where

df['isYellowSeedless'] = np.where(m, 'a', 'b')
print (df)
             Color FruitType isYellowSeedless
0        red_black     apple                b
1           yellow    banana                a
2  greenish_yellow      kiwi                b
3        orangered    orange                b
4     orangeyellow    loquat                a

转换为01

df['isYellowSeedless'] = m.astype(int)
print (df)
             Color FruitType  isYellowSeedless
0        red_black     apple                 0
1           yellow    banana                 1
2  greenish_yellow      kiwi                 0
3        orangered    orange                 0
4     orangeyellow    loquat                 1

答案 1 :(得分:2)

或者你可以尝试

df['isYellowSeedless']=df.loc[df.FruitType.isin(seedless),'Color'].str.contains('yellow')
df
Out[546]: 
             Color FruitType isYellowSeedless
0        red_black     apple              NaN
1           yellow    banana             True
2  greenish_yellow      kiwi              NaN
3        orangered    orange              NaN
4     orangeyellow    loquat             True
相关问题