我试图在满足特定条件时删除所有数据组
import pandas as pd
raw_data = {'regiment': ['51st', '51st', '51st', '51st', '51st', '51st', '51st', '51st', '51st', '51st', '51st', '51st'],
'trucks': ['MAZ-7310', 'MAZ-7310', 'MAZ-7310', 'MAZ-7310', 'Tatra 810', 'Tatra 810', 'Tatra 810', 'Tatra 810', 'ZIS-150', 'ZIS-150', 'ZIS-150', 'ZIS-150'],
'drivers': ['MAZ', 'MAZ', 'IVE', 'IVE', 'MAN', 'MAN', 'MERC', 'TATA', 'TATA', 'MAN', 'REN', 'TATA'],
'counts': [0,0,1,1,0,0,1,0, 1,2,3,4]}
df = pd.DataFrame(raw_data, columns = ['regiment', 'trucks','drivers','counts'])
regiment trucks drivers counts
0 51st MAZ-7310 MAZ 0
1 51st MAZ-7310 MAZ 0
2 51st MAZ-7310 IVE 1
3 51st MAZ-7310 IVE 1
4 51st Tatra 810 MAN 0
5 51st Tatra 810 MAN 0
6 51st Tatra 810 MERC 1
7 51st Tatra 810 TATA 0
8 51st ZIS-150 TATA 1
9 51st ZIS-150 MAN 2
10 51st ZIS-150 REN 3
11 51st ZIS-150 TATA 4
当驱动程序为MAZ
和counts == 0
时,我试图删除MAZ-7310
组
所以我跟着这个帖子Pandas groupby and filter
df = df.groupby(['regiment','trucks']).filter(lambda x: ~((x['counts'] == 0) & (x['drivers'] == 'MAZ')).all())
但它似乎没有给我所需要的输出
预期产出
regiment trucks drivers counts
4 51st Tatra 810 MAN 0
5 51st Tatra 810 MAN 0
6 51st Tatra 810 MERC 1
7 51st Tatra 810 TATA 0
8 51st ZIS-150 TATA 1
9 51st ZIS-150 MAN 2
10 51st ZIS-150 REN 3
11 51st ZIS-150 TATA 4
如何获得此输出
thx
首先,我们分配一个名为
m
的新列,它是drivers is MAZ
和counts is 0
行的布尔值然后我们使用
GroupBy
并得到any m is True
所在的所有组然后我们使用布尔索引来得到与
~
相反的结果使用的方法:
根据需要的输出,需要使用
any
而不是all
。因此,只需将代码中的all
更改为any
相关问题 更多 >
编程相关推荐