2017-09-10 10 views
1

パンダのデータフレーム内の複数の列に基づいて値を割り当てるためのエレガントな方法はありますか?たとえば、FruitTypeとColorという2つの列を持つデータフレームがあるとします。パンダの複数の列に基づいて値を割り当てる方法は?

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

Iは、3番目の列の値を代入したい「isYellowSeedless」、「FruitType」と「カラー」列の両方に基づきます。

私はシードレスであると考えられる果物のリストを持っていて、色の列にstr "yellow"が含まれているかどうか確認したいと考えています。

seedless = ['banana', 'loquat'] 

これをすべてエレガントにストリングするにはどうすればよいですか?

これは動作しませんでした私の試みです:

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

答えて

1

使用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 
+0

私はこれも本当に好きです。彼らはそれのように連鎖することができるのか分からなかった!ありがとう! –

+0

@ J.W。彼らはインデックスによって接続されています。 Yw :-) – Wen

関連する問題