我有一个数据框,我已将所有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'}
答案 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