簡體   English   中英

基於列值的熊貓子集和放置行

[英]pandas subset and drop rows based on column value

我的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中的相同行一樣。

這不是真的,但是通常這樣做的方法是重用布爾型掩碼,如下所示:

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

您也可以使用drop()

dframe = dframe.drop(dframe.index[dframe.A == 'a'])

輸出:

    A   C
5   b   5
6   b   6
7   b   7
8   b   8
9   c   9
10  c   10
11  c   11

如果要修復index ,可以執行此操作。

dframe.index = range(len(dframe))

輸出:

    A   C
0   b   5
1   b   6
2   b   7
3   b   8
4   c   9
5   c   10
6   c   11

思考它的另一種方法。

gb = dframe.groupby(dframe.A == 'a')
isa, nota = gb.get_group(True), gb.get_group(False)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM