2017-10-15 2 views
3

저는 이것이 간단한 질문이라는 것을 알고 있습니다. 그러나 나는 Pandas에게 매우 새로운 것입니다. 열의 셀 중 하나가 0.00보다 크거나 작 으면 각 행에 대해 셀을 비교하려고합니다.Pandas DataFrame에서 행당 0이 아닌 값의 수를 확인하십시오.

   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) (키) 파일 "팬더 \ 인덱스를 받고있어 .pyx ", 132 행, pandas.index.IndexEngine.get_loc (pandas \ index.c : 4433) pandas.index.IndexEngine.get_loc (pandas \ index.) 파일의"pandas \ index.pyx " c : 4279) pandas.hashtable.PyObjectHashTable.get_item (pandas \ hashtable.c : 13742) 01의 파일 "pandas \ src \ hashtable_class_helper.pxi", 732 줄 23,516,파일 "팬더 \ SRC \ hashtable_class_helper.pxi", 라인 (740), pandas.hashtable.PyObjectHashTable.get_item에서 (팬더 \의 hashtable.c : 13696)

의도 된 행동 셀에 0이 포함 된 경우 수행 아무것도 (계속). 셀이 0 이외를 포함하는 경우, 그리고, sumTrue의 다음 eqgt (>)에 의해 비교 행

답변

2

당 비 제로 값의 개수, lt (<) 또는 le, ge, ne을 수득 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 

편집 :

에 대한 몇 가지 열이 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.columns.difference ([ 'Value'])' – jezrael

+0

답변에 추가합니다. – jezrael

관련 문제