2017-10-15 9 views
3

これは簡単な質問ですが、私はPandasにとってはとても新しいです。 列内のセルのいずれかが0.00より大きいか小さいかを調べるために、各行のセルを比較したいと思います。Pandas DataFrameの行ごとにゼロ以外の値の数を取得します

   GOOG AAPL  XOM  IBM  Value 
2011-01-10  0.0  0.0  0.0  0.0  0.00 
2011-01-13  0.0 -1500.0  0.0 4000.0 -61900.00 

私はパンダにiterrowsが組み込まれていることを知っています。ただし、以下のコードで、私はエラー

for index, row in dataFrame.iterrows(): 
    for i in range(0, len(of_columns)): 
     print dataFrame[index][i] 

エラー

リターンself._engine.get_loc(self._maybe_cast_indexer(キー)) ファイル「パンダの\指数を受けていますpandas.index.IndexEngine.get_loc(pandas \ index.c:4433) pandas.index.IndexEngine.get_loc(pandas \ index。)のファイル "pandas \ index.pyx" 154行目。 c:4279) pandas.hashtable.PyObjectHashTable.get_item(pandas \ hashtable.c:13742)01のファイル "pandas \ src \ hashtable_class_helper.pxi"、732行目pandas.hashtable.PyObjectHashTable.get_item(パンダの\のhashtable.c:13696)でファイル "パンダ\ SRC \ hashtable_class_helper.pxi"、行740、

意図したアクション セルは0が含まれている場合は、か何もない(続行)。細胞がゼロ以外含まれている場合、行あたりの非ゼロ値Truesum次いで

答えて

2
gt>)によって比較

lt<)又はlegeneeq第一及びsの数を得、 1ようにそこ処理されています

バート - >以前のすべての列をチェック:

df['> zero'] = df.gt(0).sum(axis=1) 
df['< zero'] = df.lt(0).sum(axis=1) 
df['== zero'] = df.eq(0).sum(axis=1) 
print (df) 
      GOOG AAPL XOM  IBM Value > zero < zero == zero 
2011-01-10 0.0  0.0 0.0  0.0  0.0  0  0  7 
2011-01-13 0.0 -1500.0 0.0 4000.0 -61900.0  1  2  2 
を3210

正しい - チェックのために選択した列:

cols = df.columns 
df['> zero'] = df[cols].gt(0).sum(axis=1) 
df['< zero'] = df[cols].lt(0).sum(axis=1) 
df['== zero'] = df[cols].eq(0).sum(axis=1) 
print (df) 
      GOOG AAPL XOM  IBM Value > zero < zero == zero 
2011-01-10 0.0  0.0 0.0  0.0  0.0  0  0  5 
2011-01-13 0.0 -1500.0 0.0 4000.0 -61900.0  1  2  2 

詳細:

print (df.gt(0)) 
      GOOG AAPL XOM IBM Value 
2011-01-10 False False False False False 
2011-01-13 False False False True False 

EDIT:

のためのいくつかの列がdifference使用削除:

cols = df.columns.difference(['Value']) 
print (cols) 
Index(['AAPL', 'GOOG', 'IBM', 'XOM'], dtype='object') 

df['> zero'] = df[cols].gt(0).sum(axis=1) 
df['< zero'] = df[cols].lt(0).sum(axis=1) 
df['== zero'] = df[cols].eq(0).sum(axis=1) 
print (df) 
      GOOG AAPL XOM  IBM Value > zero < zero == zero 
2011-01-10 0.0  0.0 0.0  0.0  0.0  0  0  4 
2011-01-13 0.0 -1500.0 0.0 4000.0 -61900.0  1  1  2 
+0

グレート答えが、何を計算のValueの列を削除したいのですか? cols = dataFrame.columnsでそれを削除するにはどうすればよいですか? –

+1

'cols = df.cumns.difference(['Value'])' – jezrael

+0

私はそれを答えに加えます。 – jezrael

関連する問題