[英]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.