在Pandas DataFrame中获取每行非零值的计数

时间:2017-10-15 16:59:42

标签: python pandas

我知道这是一个简单的问题,但我对熊猫来说是个新手。 我想比较单元格的每一行,看看列中的任何单元格是多少还是小于0.00。

              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

我知道大熊猫已经内置了它们。但是,使用以下代码我收到错误

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(key))     文件" pandas \ index.pyx",第132行,在pandas.index.IndexEngine.get_loc(pandas \ index.c:4433)     文件" pandas \ index.pyx",第154行,在pandas.index.IndexEngine.get_loc(pandas \ index.c:4279)     文件" pandas \ src \ hashtable_class_helper.pxi",第732行,在pandas.hashtable.PyObjectHashTable.get_item(pandas \ hashtable.c:13742)     文件" pandas \ src \ hashtable_class_helper.pxi",第740行,在pandas.hashtable.PyObjectHashTable.get_item(pandas \ hashtable.c:13696)

预期行动 如果单元格包含0,则不执行任何操作(继续)。如果单元格包含非零值,则每行计算非零值

1 个答案:

答案 0 :(得分:3)

gt>),lt<)或le进行比较, gene, 首先是eq,然后是sum True,有类似1的处理:

不好 - &gt;检查以前的所有列:

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

正确 - 选择要检查的列:

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

编辑:

要删除&#39; cols&#39;中的某些列。使用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