2017-11-21 19 views
3

私はMxN個の配列データを持っています。 彼らはcsvファイルにあり、私はpandasモジュールを使って読んでいます。pandasデータフレームを使用したデータ操作

sv-01 sv-02 SV-03 state-01 state-02 state-03 val-01 val-02 val-03 
7  12  8   B   B   B  .23  0.34 1.03 
7  12  8   B   B   A  .35  0.10 0 
7  12  8   B   A   A  1.45 0  0 
7  12  8   A   A   A  0  0  0 
7  12  8   A   B   B  0  1.23 3.21 

... ... ... ... ... .. ... ....

私の計算目的のために、私は2つの変数が必要です。ステータスがA の場合、各行で対応するサテライトは考慮されません。したがって、最初の行の合計SVは です。同様に、他の行は2,1,0,1です。別の変数はカウント数です。 行に単一Bがない場合、その行はカウントされません。 2つのBが存在するので、 最後の行は2とみなされます。

#So my expected output is 
#Total count is 4 
#and number of satellites used is 3,2,1,0,1 in each row or iteration 

どのようにデータを反復処理できますか? rsubによって

おかげ

+0

最後の行を2としてカウントされるべきか?あなたは州の列にBsの数を数えていますか? – White

答えて

2

まずfilterAですべてのデータを比較し、合計True秒と最後の減算B

a = df.filter(like='state').eq('A').sum(axis=1).rsub(3) 
#same as 
#a = 3 - (df.filter(like='state') == 'A').sum(axis=1) 
print (a) 
0 3 
1 2 
2 1 
3 0 
4 2 
dtype: int64 

は詳細:countに

print (df.filter(like='state')) 
    state-01 state-02 state-03 
0  B  B  B 
1  B  B  A 
2  B  A  A 
3  A  A  A 
4  A  B  B 

print (df.filter(like='state').eq('A')) 
    state-01 state-02 state-03 
0  False  False  False 
1  False  False  True 
2  False  True  True 
3  True  True  True 
4  True  False  False 

すべての非A行少なくとも1つのチェックにはanyを使用してくださいTruesum:すべて一緒に

b = df.filter(like='state').eq('A').any(1).sum() 
print (b) 
4 

print (df.filter(like='state').eq('A').any(1)) 
0 False 
1  True 
2  True 
3  True 
4  True 
dtype: bool 

は:

mask = df.filter(like='state').eq('A') 
a = mask.sum(axis=1).rsub(3) 
print (a) 
0 3 
1 2 
2 1 
3 0 
4 2 
dtype: int64 

b = mask.any(1).sum() 
print (b) 
4 
+0

@ jezrael私は2つの疑問を持っています.1。何が「好き」なのか。 2とカウントの総数を計算する方法。これは、4行目にBがないため、4です。 – Poka

+0

'like 'は、' state'を検索するためのチェック列nmaesを意味します。 ef(100).sum(1) ' – jezrael

+0

私は' b'の解決策を追加します – jezrael

関連する問題