2016-11-15 7 views
0

データフレーム内の特定の行が複数のフィルタを満たすかどうかを確認する方法はありますか?フィルタを満たす行を見つけて、フィルタを渡すと余計な値を追加したいと考えています。例えばパンダのデータフレーム:行が複数の列フィルタを満たすかどうかを確認する

a b c d e f 
2000-01-01 1 1 2 
2000-01-02 0 0 0 
2000-01-03 1 -2 -1 
2000-01-04 5 -5 -2 
2000-01-05 0 -5 0 
2000-01-06 0 0 0 
2000-01-07 5 -2 6 
2000-01-08 0 0 0 

は(D、E、Fは空である)列を持つデータフレーム、B、C、D、E、Fを考えます。どのように私のような何かを行うことができますので、2、6、および8は、列D、E、Fで0を持つべき行

if (df['a'] == 0 AND df['b'] == 0 AND df['c'] == 0): 
    df['d'] = 0 
    df['e'] = 0 
    df['f'] = 0 

を、そして残りの行は、それらの列に空の値を持っている必要があり

ありがとう!

答えて

1

あなたは、インデックス作成と割り当てのための論理的なベクトルを作成するために、ベクトル化や&を使用することができます。

df.loc[(df.a == 0) & (df.b == 0) & (df.c == 0), list('def')] = 0 

enter image description here

更新d,e,fの値が異なる場合、あなたのような何かを行うことができます:

df.loc[(df.a == 0) & (df.b == 0) & (df.c == 0), list('def')] = 1,2,3 

enter image description here

+0

'd'、 'e'、 'f'の値を異ならせたい場合はどうすればよいですか?もし、条件が満たされていれば、それぞれ 'd'、 'e'、 'f'の値を1,2,3にそれぞれ変更してください。 – djskj189

+0

あなたは次のようにすることができます: 'df.loc [(df.a == 0 )&(df.b == 0)&(df.c == 0)、list( 'def')] = 1,2,3' – Psidom

関連する問題