Skip to main content
 首页 » 编程设计

python之Pandas 子集并根据列值删除行

2025年05月04日25TianFang

我的 df:

dframe = pd.DataFrame({"A":list("aaaabbbbccc"), "C":range(1,12)},  index=range(1,12)) 
 
Out[9]:  
    A   C 
1   a   1 
2   a   2 
3   a   3 
4   a   4 
5   b   5 
6   b   6 
7   b   7 
8   b   8 
9   c   9 
10  c  10 
11  c  11 

基于列值的子集:

In[11]: first = dframe.loc[dframe["A"] == 'a'] 
In[12]: first 
Out[12]:  
   A  C 
1  a  1 
2  a  2 
3  a  3 
4  a  4 

根据列值删除:

In[16]: dframe = dframe[dframe["A"] != 'a'] 
In[17]: dframe 
Out[16]:  
    A   C 
5   b   5 
6   b   6 
7   b   7 
8   b   8 
9   c   9 
10  c  10 
11  c  11 

有没有什么办法可以一次做到这两点?就像根据列值对行进行子集化并删除原始 df 中的相同行。

请您参考如下方法:

这不是真正的一次拍摄,但通常这样做的方法是重复使用 bool 掩码,如下所示:

In [28]: mask = dframe['A'] == 'a' 
 
In [29]: first, dframe = dframe[mask], dframe[~mask] 
 
In [30]: first 
Out[30]: 
   A  C 
1  a  1 
2  a  2 
3  a  3 
4  a  4 
 
In [31]: dframe 
Out[31]: 
    A   C 
5   b   5 
6   b   6 
7   b   7 
8   b   8 
9   c   9 
10  c  10 
11  c  11