如何使用Pandas从Groupby方法中排除单个值

时间:2016-01-28 18:55:09

标签: python pandas

我有一个数据框,我已将所有NaN转换为0,原因有很多。在对df进行另一次计算时,我的group by正在拾取0并使其成为执行计数的值。知道如何让python和pandas排除0值吗?在这种情况下,0表示数据中的单行。有没有办法从群组中排除所有0?

我的groupby看起来像这样

  +----------------+----------------+-------------+
  | Team           | Method         |  Count      |
  +----------------+----------------+-------------+
  | Team 1         | Automated      |           1 |
  | Team 1         | Manual         |          14 |
  | Team 2         | Automated      |           5 |
  | Team 2         | Hybrid         |           1 |
  | Team 2         | Manual         |          25 |
  | Team 4         | 0              |           1 |
  | Team 4         | Automated      |           1 |
  | Team 4         | Hybrid         |          13 |
  +----------------+----------------+-------------+

我的代码看起来像这样(导入excel文件后)

  df = df1.filnna(0)
  a = df[['Team', 'Method']]
  b = a.groupby(['Team', 'Method']).agg({'Method' : 'count'}

2 个答案:

答案 0 :(得分:1)

我在分组前过滤df:

In [8]:
a = df.loc[df['Method'] !=0, ['Team', 'Method']]
b = a.groupby(['Team', 'Method']).agg({'Method' : 'count'})
b
Out[8]:
                Method
Team Method           
1    Automated       1
     Manual          1
2    Automated       1
     Hybrid          1
     Manual          1
4    Automated       1
     Hybrid          1

这里我们只选择方法不等于0

的行

在没有过滤的情况下进行比较:

In [9]:
a = df[['Team', 'Method']]
b = a.groupby(['Team', 'Method']).agg({'Method' : 'count'})
b

Out[9]:
                Method
Team Method           
1    Automated       1
     Manual          1
2    Automated       1
     Hybrid          1
     Manual          1
4    0               1
     Automated       1
     Hybrid          1

答案 1 :(得分:0)

您需要filter

  

filter方法返回原始对象的子集。假设   我们只想采用属于具有组总和的组的元素   大于2。

示例:

  

在[94]中:sf = pd.Series([1,1,2,3,3,3])

     

在[95]中:sf.groupby(sf).filter(lambda x:x.sum()> 2)Out [95]:3 3   4 3 5 3 dtype:int64

Source