根据组中某列中的值的存在,在groupby之后删除组

时间:2019-02-22 02:37:36

标签: python pandas pandas-groupby

0.24.1上,给出:

toy = pd.DataFrame({'g': [1,1,1,2,2,3,3], 'val': [0,2,3,4,5,6,0]})
toy
   g  val
0  1    0
1  1    2
2  1    3
3  2    4
4  2    5
5  3    6
6  3    0

我要删除整个组,其中该组的v列包含零。换句话说,在咒语(最好包含inplace=True以保留我的数据转换管道)之后,我希望toy为:

   g  val
3  2    4
4  2    5

3 个答案:

答案 0 :(得分:3)

使用filter

toy.groupby('g').filter(lambda x : all(x['val']!=0))
Out[58]: 
   g  val
3  2    4
4  2    5

答案 1 :(得分:3)

或者您也可以这样做:

<table>
<thead>
<tr>
    <th></th>
    @foreach($officers as $week => $roll)
        <th>Week {{$week}}</th>
    @endforeach
    <th>Total</th>
</tr>
</thead>
<tbody>
<tr>
    <td>Officers</td>
    @foreach($officers as $week => $roll)
        <td>{{$roll->sum()}}</td>
    @endforeach
    <td>{{$officers->sum(function ($week) { return $week->count(); })}}</td>
</tr>
</tbody>

答案 2 :(得分:3)

这有效:

toy.loc[toy.groupby('g').transform(np.prod).query('val !=0').index, :]