2017-03-22 4 views
2

でシリーズのサブセットの変換:条件は、パンダ(パイソン)で、次の変換を行うためのクリーンな方法は何ですかパンダ

基本的に
number color 
10  blue 
15  FALSE 
25  FALSE 
35  blue 
15  FALSE 
30  green 
    5  FALSE 
20  blue 
50  red 

number color 
10  blue 
15  red 
25  green 
35  blue 
15  pink 
30  green 
    5  red 
20  blue 
50  red 

、私は変更したいです番号が< 30のすべての色ですが、その規則は、色が青でない場合にのみ適用されます。

ありがとうございます!

答えて

2

一つのアプローチ -

df.loc[(df.number < 30) & (df.color != 'blue'),'color'] = False 

サンプル実行 -

In [409]: df 
Out[409]: 
    number color 
0  10 blue 
1  15 red 
2  25 green 
3  35 blue 
4  15 pink 
5  30 green 
6  5 red 
7  20 blue 
8  50 red 

In [410]: df.loc[(df.number < 30) & (df.color != 'blue'),'color'] = False 

In [411]: df 
Out[411]: 
    number color 
0  10 blue 
1  15 False 
2  25 False 
3  35 blue 
4  15 False 
5  30 green 
6  5 False 
7  20 blue 
8  50 red 
+0

Fab!それは素晴らしい解決策です。何かも.map()で動作しますか?ちょっと興味があるんだけど。 – user2475110

+0

@ user2475110 'map'ベースのメソッドにはあまり慣れていません。私はベクトル化されたメソッドを好む:) – Divakar

1

代わりにマップの、あなたは "適用" を使用することができます。 Applyは各行に関数を実行します。

def mod_color(row) : 
    if row.number < 30 and row.color != 'blue': 
     row.color = False 
    return row 

df.apply(mod_color, axis=1) 
関連する問題